• poj3984迷宫问题


    一个5 × 5的二维数组,表示一个迷宫。其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

    很简单的一道题,迷宫问题,一般都选择两种优先搜索方法去解,最短路线问题应该要用BFS,而不是DFS. 这道题目还需要记录路线,所以还加有存储父节点的一个空间。

    贴代码如下(发现我只要是这两种方法,代码写的都不短啊):

    #include<iostream>
    #include<queue>
    #include<vector>
    using namespace std;
    typedef class{
    public:
        int x,y;
        int fx,fy;
    }vertex;
    
    
    int maze[5][5];
    int trace[5][5]={0};
    vertex record[5][5];
    void BFS()
    {
        vertex start,end,v,n;
        start.x=0;start.y=0;
        end.x=4;end.y=4;
        trace[0][0]=1;
        record[0][0]=start;
        queue<vertex> dfq;
        vector<vertex> path;
        dfq.push(start);
        while(dfq.size()!=0)
        {
            v=dfq.front();
            dfq.pop();
            if(v.x-1>=0&&maze[v.x-1][v.y]!=1&&trace[v.x-1][v.y]==0)
            {
                trace[v.x-1][v.y]=1;
                n.x=v.x-1;n.y=v.y;n.fx=v.x;n.fy=v.y;
                dfq.push(n);
                record[n.x][n.y]=n;
            }
            if(v.x+1<=4&&maze[v.x+1][v.y]!=1&&trace[v.x+1][v.y]==0)
            {
                trace[v.x+1][v.y]=1;
                n.x=v.x+1;n.y=v.y;n.fx=v.x;n.fy=v.y;
                dfq.push(n);
                record[n.x][n.y]=n;
            }
            if(v.y-1>=0&&maze[v.x][v.y-1]!=1&&trace[v.x][v.y-1]==0)
            {
                trace[v.x][v.y-1]=1;
                n.x=v.x;n.y=v.y-1;n.fx=v.x;n.fy=v.y;
                dfq.push(n);
                record[n.x][n.y]=n;
            }
            if(v.y+1<=4&&maze[v.x][v.y+1]!=1&&trace[v.x][v.y+1]==0)
            {
                trace[v.x][v.y+1]=1;
                n.x=v.x;n.y=v.y+1;n.fx=v.x;n.fy=v.y;
                dfq.push(n);
                record[n.x][n.y]=n;
            }
        }
        int flag=1,x=4,y=4;
        while(flag)
        {
            vertex w=record[x][y];
            path.push_back(w);
            if(x==0&&y==0) flag=0;
            else{
                x=w.fx;y=w.fy;
            }
        }
        for(int i=path.size()-1;i>=0;i--)
        {
            cout<<"("<<path[i].x<<", "<<path[i].y<<")"<<endl;
        }
    }
                
        
    
    
    int main()
    {
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++)
            {
                cin>>maze[i][j];
            }
       BFS();
       return 0;
    }
  • 相关阅读:
    【译】在 Chrome 开发者工具中调试 node.js
    2015 年 JavaScript 开发者调查报告
    [译]PostCSS介绍
    [译] Angular 2 VS. React: 血色将至
    使用Fidder将生成环境代码映射到本地(文件夹)
    Sublime Text 3 搭建 React.js 开发环境
    用HTML5+JS开发跨平台的桌面应用
    npm WARN unmet dependency错误解决方法
    【数据结构与算法】线性表操作(C语言)
    【数据结构学习笔记】数组
  • 原文地址:https://www.cnblogs.com/soyscut/p/3185612.html
Copyright © 2020-2023  润新知