迷宫搜索dfs实现
题目大意:
S表示起点,T表示终点,*表示墙壁,.表示平地,求起点到终点的走法
样例数据:
5 6
....S*
.***..
.*..*.
*.***.
.T....
1 /* 2 * @Descripttion: 3 * @version: 4 * @Author: ZKYAAA 5 * @Date: 2020-04-21 21:44:53 6 * @LastEditors: 请叫我ZK谕啊啊啊 7 * @LastEditTime: 2020-04-21 22:21:30 8 * 9 * 5 6 10 * ....S* 11 * .***.. 12 * .*..*. 13 * *.***. 14 * .T.... 15 * 16 * 17 * S表示起点,T表示终点,*表示墙壁,.表示平地,求起点到终点的走法 18 * 19 */ 20 21 #include <bits/stdc++.h> 22 using namespace std; 23 int n,m,x,y; 24 string a[110]; 25 int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}}; 26 bool in(int x,int y){ 27 return 0<=x&&x<n&&0<=y&&y<m; 28 } 29 bool vis[110][110]; 30 bool dfs(int x,int y){ 31 if(a[x][y]=='T'){ 32 return true; 33 } 34 vis[x][y]=1; 35 a[x][y]='m'; 36 for(int i=0;i<4;i++){ 37 int tx=x+dir[i][0]; 38 int ty=y+dir[i][1]; 39 if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){ 40 if(dfs(tx,ty)){ 41 return true; 42 } 43 } 44 } 45 // int tx=x-1,ty=y; 46 // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){ 47 // if(dfs(tx,ty)){ 48 // return true; 49 // } 50 // } 51 // tx=x,ty=y-1; 52 // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){ 53 // if(dfs(tx,ty)){ 54 // return true; 55 // } 56 // } 57 // tx=tx=x+1,ty=y; 58 // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){ 59 // if(dfs(tx,ty)){ 60 // return true; 61 // } 62 // } 63 // tx=x,ty=y+1; 64 // if(in(tx,ty)&&a[tx][ty]!='*'&&!vis[tx][ty]){ 65 // if(dfs(tx,ty)){ 66 // return true; 67 // } 68 // } 69 vis[x][y]=0; 70 a[x][y]='*'; 71 return false; 72 } 73 74 int main(){ 75 76 cin>>n>>m; 77 for(int i=0;i<n;i++){ 78 cin>>a[i]; 79 } 80 for(int i=0;i<n;i++){ 81 for(int j=0;j<m;j++){ 82 if(a[i][j]=='S'){ 83 x=i,y=j; 84 } 85 } 86 } 87 if(dfs(x,y)){ 88 for(int i=0;i<n;i++){ 89 cout<<a[i]<<endl; 90 } 91 }else{ 92 cout<<"No"<<endl; 93 } 94 return 0; 95 }