zoukankan      html  css  js  c++  java
  • 洛谷 P1746 离开中山路

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

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

    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
    ",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分,最后下了一个数据,发现较大的数据没有输出???

    ???????????

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

    啊啊啊!!!!!

    #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;
    }

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

    悲惨的提交记录:

    总结的经验:

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

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

  • 相关阅读:
    SogouCloud.exe进程导致SQL Server服务无法启动
    SQL Server 锁实验(INSERT加锁探究)
    php如何处理大数据高并发
    PHP变量的初始化以及赋值方式介绍
    PHP数组具有的特性有哪些
    PHP中Session ID的实现原理分析
    PHP提高SESSION响应速度的方法有哪些
    PHP中Redis扩展无法加载问题
    关于PHP中依赖注入的详细介绍
    PHP中接口与抽象类的异同点有哪些
  • 原文地址:https://www.cnblogs.com/shanxx/p/13156368.html
Copyright © 2011-2022 走看看