ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷 P1746 离开中山路

2020-06-18 10:51:30  阅读:292  来源: 互联网

标签:head 洛谷 idx idy int P1746 5001 中山路 include


前几天做了一道广搜题,感觉搜索还是学的不好,于是做了一道广搜题。

首先看了看题,第一感觉是最短问题,也就是广度优先搜索,于是第一次提交。。。

emmm,RE了,应该是数组开太小了。

于是我开大数组.....

竟然WA了。。。肯定是哪里有问题。。。

首先看看30分的代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Node{
    int x;//X坐标 
    int y;//Y坐标 
    int ans;//走的步数 
}a[101000];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};//四个方位 
int n;//地图大小 
int x1,y1,x2,y2;//初始XY坐标,需要到达的XY坐标 
char mp[5001][5001];//地图 
int book[5001][5001];//标记 
void bfs(int idx,int idy){
    int head=1,tail=2;
    a[head].x=idx;
    a[head].y=idy;
    a[head].ans=0;//初始化 
    while(head<tail){
        for(int i=0;i<4;i++){//枚举4个方位 
            int tx=a[head].x+dx[i];
            int ty=a[head].y+dy[i];//计算新的X,Y坐标 
            if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&map[tx][ty]=='0'){//判断越界,是否走过此点 
                a[tail].x=tx;
                a[tail].y=ty;//更新新的X,Y坐标
                a[tail].ans=a[head].ans+1;//步数++ 
                map[tx][ty]='1';//标记此点 
                tail++;//出现新元素 尾++ 
                if(tx==x2&&ty==y2){//如果找到了终点 
                    printf("%d\n",a[head].ans+1);//输出步数 
                    return;
                }
            }
        }
        head++;
    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>mp[i][j];
        } 
    }
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    //输入 
    map[x1][y1]='1';//标记初始点为走过 
    bfs(x1,y1);//搜索 
    return 0;
}

最开始我没有发现问题,于是就一直30分.....

悲惨的提交记录.....

 

我当时快要疯了,为什么一直30分,最后下了一个数据,发现较大的数据没有输出???

???????????

然后发现数组开小了..........

f**k!!!!!!!

 

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Node{
    int x;
    int y;
    int ans;
}a[1001000];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
int n;
int xx,yy,xxx,yyy;
char mp[5001][5001];
void bfs(int idx,int idy,int fx,int fy){
    int head=1,tail=2;
    a[head].x=idx;
    a[head].y=idy;
    a[head].ans=0;
    mp[idx][idy]='1';
    while(head!=tail){
        for(int i=0;i<4;i++){
            int tx=a[head].x+dx[i];
            int ty=a[head].y+dy[i];
            if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&mp[tx][ty]=='0'){
                
                mp[tx][ty]='1';
                a[tail].x=tx;
                a[tail].y=ty;
                a[tail].ans=a[head].ans+1;
                tail++;
                if(tx==fx&&ty==fy){
                    cout<<a[head].ans+1<<endl;
                    return;
                } 
            }
        }
        head++;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>mp[i][j];
        } 
    }
    cin>>xx>>yy>>xxx>>yyy;
    bfs(xx,yy,xxx,yyy);
    return 0;
}

因为我太懒所以就不发注释了。。

 

悲惨的提交记录:

总结的经验:

以后做搜索题,一定要开大数组!!!!!

如果有什么说的不好的地方,恳求大佬请教!

标签:head,洛谷,idx,idy,int,P1746,5001,中山路,include
来源: https://www.cnblogs.com/shanxx/p/13156368.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有