zoukankan      html  css  js  c++  java
  • BFS

    #include <iostream>
    #include <queue>
    #include <string.h>
    using namespace std;
    /****************************************************************************************************************
                    题意:S为起点,D为终点,X为墙壁, '.'为空路,问是否可以从S走到D
                    思路:
                    1,广搜找路径
                    注意:
                    1,每次要从队首元素的邻接点开始遍历
                    2,定义了三个队列,一个存元素,另外两个存坐标
                    Input:              Output:
                        4 4                 No
                        S.X.
                        ..X.
                        ..XD
                        ..X.
    ****************************************************************************************************************/
    char map[10][10];
    int visit[10][10]={0};
    int exist=0;
    
    queue <char> Q1;
    queue <int> Q2,Q3;
    void bfs(int X,int Y)
    {
        visit[X][Y]=1;
        Q1.push(map[X][Y]);
        Q2.push(X);
        Q3.push(Y);
    
        while(!Q1.empty())
        {
            char c=Q1.front();
            int x=Q2.front();
            int y=Q3.front();
            //cout<<"c= "<<c<<" x= "<<x<<" y= "<<y<<endl;
            Q1.pop();
            Q2.pop();
            Q3.pop();
    
            if(c == 'D')    {exist=1;}
    
            if(!visit[x-1][y] && map[x-1][y] != 'X')  {visit[x-1][y]=1; Q1.push(map[x-1][y]);Q2.push(x-1);Q3.push(y);}
            if(!visit[x+1][y] && map[x+1][y] != 'X')  {visit[x+1][y]=1; Q1.push(map[x+1][y]);Q2.push(x+1);Q3.push(y);}
            if(!visit[x][y-1] && map[x][y-1] != 'X')  {visit[x][y-1]=1; Q1.push(map[x][y-1]);Q2.push(x);Q3.push(y-1);}
            if(!visit[x][y+1] && map[x][y+1] != 'X')  {visit[x][y+1]=1; Q1.push(map[x][y+1]);Q2.push(x);Q3.push(y+1);}
        }
    }
    int main()
    {
        int n,m,T;
        while(cin>>n>>m>>T)
        {
            memset(map,'X',sizeof(map));
            for(int i = 1;i <= n;i ++)
                for(int j = 1;j <= m;j ++)
                    cin>>map[i][j];
            for(int i = 1;i <= n;i ++)
                for(int j = 1;j <= m;j ++)
                    if(map[i][j] == 'S')
                        bfs(i,j);
    
            if(!exist)
                cout<<"No"<<endl;
            else
                cout<<"Yes"<<endl;
        }
        return 0;
    }
    

  • 相关阅读:
    js语言结构小记(一)
    jquery插件:fancybox
    转载(深刻地了解到了js数组是引用类型)
    sqlite 页面结构分析
    有限状态机(FSM)的设计与实现(二)
    sqlite源码中的一个潜在Bug
    一种整数数据压缩存储的算法实现
    构建自己的内存池(一)
    sqlite Btree结构分析
    构建自己的内存池(二)
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6352021.html
Copyright © 2011-2022 走看看