zoukankan      html  css  js  c++  java
  • poj 3984 迷宫问题 (BFS+记录路径)

    题目连接:http://poj.org/problem?id=3984

    题解:简单的BFS+记录路径,具体题解看代码注释。

    #include <iostream>
    #include <queue>
    #include <cstdio>
    using namespace std;
    
    struct point
    {
        int x;
        int y;
    };
    queue<point>q;
    int map[5][5];
    int vis[5][5];//标记走过的路
    int g[4][2]={0,1,0,-1,1,0,-1,0};//四个方向
    int lx[5][5],ly[5][5];//记录到达这个点的前一个点
    
    void bfs()
    {
        point p;
        p.x=0;
        p.y=0;
        q.push(p);
        while(!q.empty())
        {
            p=q.front();
            q.pop();
            if(p.x==4 && p.y==4)
                return;
            for(int i=0;i<4;i++)
            {
                int x=p.x+g[i][0];
                int y=p.y+g[i][1];
                if(x<0 || x>4 || y<0 || y>4 || vis[x][y] || map[x][y])
                    continue;
                point temp;
                temp.x=x;
                temp.y=y;
                q.push(temp);
                vis[x][y]=1;   //对走过的路进行标记
                lx[x][y]=p.x;  //记录到达这个点的前一个点的x坐标
                ly[x][y]=p.y;  //记录到达这个点的前一个点的y坐标
            }
        }
    }
    
    void cout_way(int x,int y)//递归输出
    {
        if(x||y) cout_way(lx[x][y],ly[x][y]);
        printf("(%d, %d)
    ",x,y);
    }
    int main()
    {
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
                cin>>map[i][j];
        bfs();
        cout_way(4,4);
        /*for(int i=0;i<5;i++)//每一个状态之前的状态
        {
            for(int j=0;j<5;j++)
                printf("(%d,%d) 
    ",lx[i][j],ly[i][j]);
            cout<<endl;
        }*/
        return 0;
    }
  • 相关阅读:
    新购服务器流程
    nginx代理证书使用方法
    一键部署lnmp脚本
    mysql主从库配置读写分离以及备份
    Linux入门教程(更新完毕)
    Git 工作流程
    Git远程操作
    常用Git命令
    js数组去重
    Sublime Text设置快捷键让html文件在浏览器打开
  • 原文地址:https://www.cnblogs.com/mgxj/p/4446831.html
Copyright © 2011-2022 走看看