1251:仙岛求药

仙岛求药

思路和 Dungeon Master 一致。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 using namespace std;
 6 
 7 const int N=25;
 8 char a[N][N];
 9 int r,c,b[N][N],t[]={1,0,-1,0,0,1,0,-1};
10 queue<int> q;
11 
12 void bfs(){
13     while(!q.empty()){
14         int x=q.front();
15         q.pop();
16         int y=q.front();
17         q.pop();
18         for(int i=0;i<4;i++){
19             int nx=x+t[i],ny=y+t[i+4];
20             if(nx>0&&nx<=r&&ny>0&&ny<=c&&(a[nx][ny]=='.'||a[nx][ny]=='*')&&(!b[nx][ny]||b[nx][ny]>b[x][y]+1)){
21                 q.push(nx),q.push(ny);
22                 b[nx][ny]=b[x][y]+1;
23             }
24         }
25     }
26 }
27 int main(){
28     int x1,y1,x2,y2;
29     char cc;
30     while(cin>>r>>c){
31         getchar();
32         if(!r&&!c)break;
33         for(int i=1;i<=r;i++){
34             for(int j=1;j<=c;j++){
35                 scanf("%c",&cc);
36                 if(cc=='@'){
37                     x1=i,y1=j;
38                 }else if(cc=='*'){
39                     x2=i,y2=j;
40                 }
41                 a[i][j]=cc;
42             }
43             getchar();
44         }
45         memset(b,0,sizeof(b));
46         q.push(x1),q.push(y1);
47         bfs();
48         if(b[x2][y2])printf("%d\n",b[x2][y2]);
49         else printf("-1\n");
50     }
51     return 0;
52 }

 

posted @ 2021-08-13 18:00  Rekord  阅读(285)  评论(0编辑  收藏  举报