zoukankan      html  css  js  c++  java
  • POJ 3984

    bfs,用数组来构建队列,用front指针来连接每一步

    输出的时候注意(0, 0)逗号后又一个空格。。。。被坑了一次

    #include <iostream>
    using namespace std;
    struct step{
        int x,y;
        step *front;
        void init(int xx,int yy){
            x=xx;
            y=yy;
        }
    };
    int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
    int sq[5][5];
    step q[30];                            //相当于数组队列,用于记录每一步
    step bfs(){
        int i,nx,ny,x,y;
        step start;
        start.init(4,4);                        //从右下角开始走,终点为左上角
        start.front=NULL;
        q[0]=start;
        int j=0,l=1;
        while(j<=l){
            x=q[j].x;
            y=q[j].y;
            for(i=0;i<4;i++){
                nx=x+dir[i][0];
                ny=y+dir[i][1];
                if(nx<0||nx>4||ny<0||ny>4)continue;
                if(sq[ny][nx]==1)continue;
                sq[ny][nx]=1;
                step s;
                s.init(nx,ny);
                s.front=&q[j];                                    //用于记录前一步的指针
                if(s.x==0&&s.y==0)return s;
                q[l]=s;
                l++;
            }
            j++;
        }
        return start;
    }
    int main(){
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                cin>>sq[i][j];
            }
        }
        step *s;
        step b;
        b=bfs();
        s=&b;
        while(s->front!=NULL){                            //用指针来记录路径,
            cout<<"("<<s->y<<", "<<s->x<<")"<<endl;
            s=s->front;
        }
        cout<<"(4, 4)"<<endl;
        return 0;
    }

  • 相关阅读:
    程序员是脑力劳动还是体力劳动
    我理解的技术管理的核心工作----搭班子和带团队
    Ubuntu系统下在PyCharm里用virtualenv集成TensorFlow
    我理解的技术管理的核心工作----定战略
    数据分析师岗位的一点理解
    python中读写excel并存入mysql
    mac里用PyCharm中引用MySqlDB始末
    贝叶斯网络的通俗解读
    将sqlserver导出的csv数据导入到ubuntu和mac上的mysql
    Java之Spring Cloud概念介绍(非原创)
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3855016.html
Copyright © 2011-2022 走看看