题目:一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。
输入格式
第一行输入两个整数 n和 m,表示这是一个 n×m 的迷宫。
接下来的输入一个 n 行 m 列的迷宫。其中 ‘S’ 表示蒜头君的位置,’*‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.'移动,'T’表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"。
数据范围
1≤n,m≤10
样例输入1
3 4
S**.
…*.
***T
样例输出1
no
样例输入2
3 4
S**.
…
***T
样例输出2
yes
dfs:
#include<iostream>
using namespace std;
const int N=15;
char a[N][N];
bool vis[N][N];
int n,m;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
bool flag;//有没有答案,false表示没有void dfs(int x,int y){if(flag) return;if(a[x][y]=='T'){flag=true; return;}for(int i=0;i<4;i++){int nextx=x+dx[i];int nexty=y+dy[i];if(!vis[nextx][nexty]&&a[nextx][nexty]!='*'&&nextx>=1&&nextx<=n&&nexty>=1&&nexty<=m){vis[nextx][nexty]=true;dfs(nextx,nexty);vis[nextx][nexty]=false;}}
}
int main(){cin>>n>>m;int startx,starty;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];if(a[i][j]=='S'){startx=i;starty=j;}}}dfs(startx,starty);if(flag) cout<<"yes"<<endl;else cout<<"no"<<endl; return 0;
}
bfs:
#include<iostream>
#include<queue>
using namespace std;
const int N=15;typedef struct{int x;int y;
}point;queue<point> q;
char a[N][N];
bool vis[N][N];
int n,m;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};void bfs(){while(q.size()){point p=q.front();int x=p.x,y=p.y;if(a[x][y]=='T'){break;}for(int i=0;i<4;i++){int nextx=x+dx[i],nexty=y+dy[i];if(!vis[nextx][nexty]&&a[nextx][nexty]!='*'&&nextx>=1&&nextx<=n&&nexty>=1&&nexty<=m){vis[nextx][nexty]=true;point next;next.x=nextx;next.y=nexty;q.push(next);}}q.pop();}
}
int main(){cin>>n>>m;point p;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];if(a[i][j]=='S'){p.x=i;p.y=j;}}}q.push(p);bfs();if(q.size()) cout<<"yes"<<endl;else cout<<"no"<<endl; return 0;
}