当前位置:   article > 正文

笔记五(C++中对于迷宫寻路问题的BFS求解)_bfsc++二维矩阵

bfsc++二维矩阵
  1. 题目描述
  2. 假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径。迷宫可以用一个二维矩阵组成,有的部分是墙,有的部分是路。迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与之匹配的钥匙,只有先拿到钥匙才能打开门。请设计一个算法,帮助探险家找到脱困的最短路径。如前所述,迷宫是通过一个二维矩阵表示的,每个元素的值的含义如下 0-墙,1-路,2-探险家的起始位置,3-迷宫的出口,大写字母-门,小写字母-对应大写字母所代表的门的钥匙
  3. 输入描述:
  4. 迷宫的地图,用二维矩阵表示。第一行是表示矩阵的行数和列数M和N
  5. 后面的M行是矩阵的数据,每一行对应与矩阵的一行(中间没有空格)。M和N都不超过100, 门不超过10扇。
  6. 输出描述:
  7. 路径的长度,是一个整数
  8. 示例1
  9. 输入
  10. 5 5
  11. 02111
  12. 01a0A
  13. 01003
  14. 01001
  15. 01111
  16. 输出
  17. 7
  1. #include<stdio.h>
  2. #include<queue>
  3. #include<string.h>
  4. #include<vector>
  5. using namespace std;
  6. char G[105][105];
  7. int book[105][105][1200],N,M;
  8. int Next[4][2]={0,1,0,-1,1,0,-1,0};
  9. int bfs(int,int);
  10. struct node{
  11. int x,y,k,step;
  12. node(int x,int y,int k,int step):x(x),y(y),k(k),step(step){}
  13. };
  14. int main(){
  15. int i,j;
  16. //freopen("input.txt","r",stdin);
  17. while(scanf("%d%d",&N,&M)!=EOF){
  18. for(i=0;i<N;i++) scanf("%s",G[i]);
  19. memset(book,0,sizeof(book));
  20. int flag=0;
  21. for(i=0;i<N;i++){
  22. if(flag==1) break;
  23. for(j=0;j<M;j++)
  24. if(G[i][j]=='2'){
  25. flag=1;
  26. book[i][j][0]=1;
  27. printf("%d\n",bfs(i,j));
  28. break;
  29. }
  30. }
  31. }
  32. }
  33. int bfs(int startX,int startY){
  34. queue<node> Q;
  35. Q.push(node(startX,startY,0,0));
  36. while(!Q.empty()){
  37. node head=Q.front();Q.pop();
  38. if(G[head.x][head.y]=='3') return head.step;
  39. for(int i=0;i<4;i++){
  40. int nx=head.x+Next[i][0],ny=head.y+Next[i][1];
  41. if(nx>=N||nx<0||ny>=M||ny<0||G[nx][ny]=='0') continue;
  42. int key=head.k;
  43. if('a'<=G[nx][ny]&&G[nx][ny]<='z') key=key|(1<<(G[nx][ny]-'a'));
  44. if('A'<=G[nx][ny]&&G[nx][ny]<='Z'&&(key&(1<<(G[nx][ny]-'A')))==0) continue;
  45. if(!book[nx][ny][key]){
  46. book[nx][ny][key]=1;
  47. Q.push(node(nx,ny,key,head.step+1));
  48. }
  49. }
  50. }
  51. return 0;
  52. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/714567
推荐阅读
相关标签
  

闽ICP备14008679号