仙岛求药
Posted peppa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仙岛求药相关的知识,希望对你有一定的参考价值。
我真菜,真的。
我不仅很菜,而且很矬;
所以写这篇题解的目的是想证明我很菜;
但怎么证明我很矬呢;
只要去我们班的群相册里看一下;
就会发现,我是众多小姑娘中最矬的那一个;
这道题在大家都轻松A掉的时候,我还一直WA;
我又菜又矬,真的。
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 char s[23][23]; 8 int st[23][23]; 9 int i,j,m,n,sx,sy,tx,ty,ans = 0; 10 void bfs(int sx,int sy) 11 { 12 int t = st[sx][sy]; 13 if(sx == tx && sy == ty) 14 ans = t; 15 t++; 16 if(sx + 1 < m && s[sx+1][sy] != ‘#‘ && st[sx+1][sy] > t) 17 { 18 st[sx + 1][sy] = t; 19 bfs(sx+1,sy); 20 } 21 if(sx - 1 >= 0 && s[sx-1][sy] != ‘#‘ && st[sx-1][sy] > t) 22 { 23 st[sx - 1][sy] = t; 24 bfs(sx-1,sy); 25 } 26 if(sy + 1 < n && s[sx][sy+1] != ‘#‘ && st[sx][sy+1] > t) 27 { 28 st[sx][sy+1] = t; 29 bfs(sx,sy+1); 30 } 31 if(sy-1 >= 0 && s[sx][sy-1] != ‘#‘ && st[sx][sy-1] > t) 32 { 33 st[sx][sy-1] = t; 34 bfs(sx,sy-1); 35 } 36 } 37 int main() 38 { 39 while(scanf("%d%d",&m,&n) != EOF) 40 { 41 if(m == 0 && n == 0) break; 42 for(i = 0;i < m;i++) 43 for(j = 0;j < n;j++) 44 { 45 cin >> s[i][j]; 46 if(s[i][j] == ‘@‘) 47 { 48 sx = i; 49 sy = j; 50 } 51 if(s[i][j] == ‘*‘) 52 { 53 tx = i; 54 ty = j; 55 } 56 } 57 memset(st,0x7f,sizeof(st)); 58 st[sx][sy] = 0; 59 bfs(sx,sy); 60 if(ans != 0) printf("%d ",ans); 61 else printf("-1 "); 62 ans = 0; 63 } 64 return 0; 65 }
这道题用广搜(深搜会T(吧)),然后思路是比当前解优就更新。
以上是关于仙岛求药的主要内容,如果未能解决你的问题,请参考以下文章