字符迷宫
题目:

这道题非常简单:
就是一道非常简单的bfs模板题思路就不多讲了,主要讲一下坑:
1.end是一个函数
2.要有一个状态变量flag来记录能不能到
3.需要用 string (其实我也不知道怎么回事char一直错)
4.改string的时候各种地方都要改。
程序:
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=110; 4 int n,m,vis[N][N]={0}; 5 string a[N]; 6 struct point{ 7 int x; 8 int y; 9 }; 10 int flag=0,d[10][10]={{1,0},{0,1},{-1,0},{0,-1}}; 11 queue <point> q; 12 point end1; 13 void bfs(point s) 14 { 15 q.push(s); 16 while(q.size()) 17 { 18 point op=q.front(); 19 if(op.x==end1.x&&op.y==end1.y) 20 { 21 flag=1; 22 return; 23 } 24 else 25 { 26 for(int i=0;i<4;i++) 27 { 28 point np; 29 np.x=op.x+d[i][0]; 30 np.y=op.y+d[i][1]; 31 if(np.x>=0&&np.x<n&&np.y>=0&&np.y<m&&vis[np.x][np.y]==0&&a[np.x][np.y]!='#') 32 { 33 vis[np.x][np.y]=vis[op.x][op.y]+1; 34 q.push(np); 35 } 36 } 37 } 38 q.pop(); 39 } 40 } 41 int main() 42 { 43 cin>>n>>m; 44 point s; 45 for(int i=0;i<n;i++) 46 { 47 cin>>a[i]; 48 for(int j=0;j<m;j++) 49 { 50 if(a[i][j]=='S') 51 { 52 s.x=i; 53 s.y=j; 54 } 55 else if(a[i][j]=='T') 56 { 57 end1.x=i; 58 end1.y=j; 59 } 60 } 61 } 62 bfs(s); 63 if(flag==1) cout<<vis[end1.x][end1.y]; 64 else cout<<"-1"; 65 return 0; 66 }

浙公网安备 33010602011771号