迷宫搜索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 }
 
原文地址:https://www.cnblogs.com/ZKYAAA/p/12748455.html