zoukankan      html  css  js  c++  java
  • poj 3984 迷宫问题 dfs 求迷宫路径

    题目地址:http://poj.org/problem?id=3984

    利用图论中深搜的思想,存在边就是x,y ->  x+1,y  还有x,y -> x,y+1   然后仍然是访问未访问的而且不是墙壁的地方。  这样保证不走已经搜索过,走不通的路。

    唯一一种需要重复访问已经访问的结点的情况是已经无路可走了,只能返回,这样就在栈中将路径取出来,把自己现在的那个先pop掉,然后实现回溯。

    最后用向量实现栈的自底输出。

    代码:

     ID User Problem Result Memory Time Language Code Length Submit Time
    12143517 814jingqi 3984 Accepted 720K 0MS G++ 1276B 2013-09-25 17:55:15
    12143515 814jingqi 3984 Accepted 184K 0MS C++ 1276B 2013-09-25 17:54:11

    可以看到,同一份代码,g++和c++有时差别还是很大的


    #include<iostream>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<cstdio>
    using namespace std;
    
    
    
    struct  node
    {
       int a,b;
    
    };
    
    int maze[7][7];
    bool vis[7][7];
    
    stack<node>  passby;
    
    int n;
    void init()
    {
       memset(vis,0,sizeof(vis));
    
       for(int i=0;i<7;i++)
        {
           maze[i][0]=1;
           maze[0][i]=1;
           maze[6][i]=1;
           maze[i][6]=1;
    
        }
    
    }
    
    
    
    void dfs(int x,int y)
    {
    
      //  cout<<x<<' '<<y<<endl;
        if(!vis[x][y])     // 如果没有访问过
        {
            node cur;
            cur.a=x;
            cur.b=y;
    
            vis[x][y]=1;
    
            passby.push(cur);
        }
    
        if(x==5&&y==5)   return ;
    
            if(!vis[x+1][y]&&!maze[x+1][y]) dfs(x+1,y);
            else if(!vis[x][y+1]&&!maze[x][y+1]) dfs(x,y+1);
            else
            {
               passby.pop();
               node cur=passby.top();
               dfs(cur.a,cur.b);
            }
    
    }
    
    int main()
    {
    
    
       for(int i=1;i<=5;i++)
         for(int j=1;j<=5;j++)
            scanf("%d",&maze[i][j]);
    
       init();
    
    
       dfs(1,1);
       vector<node>  v;
       while(passby.empty()==false)
       {
           v.push_back(passby.top());
           passby.pop();
    
       }
    
       for(int i=v.size()-1;i>=0;i--)
       {
           printf("(%d, %d)
    ",v[i].a-1,v[i].b-1);
    
       }
    }



  • 相关阅读:
    metal的gpu query
    体积雾 global fog unity 及改进
    hdr rt format对颜色的影响
    unity deferred lighting
    unity linear space时 photoshop blend的正确设置
    unity linear work flow
    一些数据 bandwidth之类
    deferred rendering with msaa
    unity 显示mipmaplevel
    【转】在C#中使用SendMessage
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3339246.html
Copyright © 2011-2022 走看看