迷宫

来源:互联网 发布:java技术总监面试题 编辑:程序博客网 时间:2024/05/16 19:56

http://codevs.cn/problem/1215/
迷宫找出路,bfs上下左右的搜索,做好是否访问过的记录。
题解说dfs也可以,洗个澡回来弄dfs

#include<iostream>#include<stdio.h>#include<cmath>#include<string.h>//#include<map>#include<queue>#include<algorithm>using namespace std;struct mystruct{    int x,y;};int main(){    int n;    int map[105][105]={0};    int pyx[]={-1,1,0,0};    int pyy[]={0,0,-1,1};    cin>>n;    for (int i = 0; i < n; ++i)        {            /* code */            int len;            cin>>len;            string temp;            for (int j = 0; j < len; ++j)            {                /* code */                cin>>temp;                for (int k = 0; k < len; ++k)                {                    /* code */                    if (temp[k]=='#')                    {                        /* code */                        map[j][k]=0;                    }else                    {                        map[j][k]=1;                    }                }            }            bool flag=false;            mystruct tempstruct;            queue<mystruct>que;            tempstruct.x=0;            tempstruct.y=0;            que.push(tempstruct);            while(!que.empty())            {                tempstruct=que.front();                que.pop();                if (tempstruct.x==len-1&&tempstruct.y==len-1)                {                    /* code */                    flag=true;                    break;                }else                {                    for (int j = 0; j < 4; ++j)                    {                        /* code */                        int x=tempstruct.x+pyx[j];                        int y=tempstruct.y+pyy[j];                        if (x>=0&&y>=0&&x<len&&y<len&&map[x][y])                        {                            /* code */                            map[x][y]=0;                            mystruct tempstructtemp;                            tempstructtemp.x=x;                            tempstructtemp.y=y;                            que.push(tempstructtemp);                        }                    }                }            }            if (flag)            {                /* code */                cout<<"YES"<<endl;            }else            {                cout<<"NO"<<endl;            }        }       return 0;}
0 0