字符迷宫

题目:

 

 这道题非常简单:

就是一道非常简单的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 }

 

posted @ 2022-04-03 10:38  王浩泽  阅读(112)  评论(0)    收藏  举报