迷宫问题 bfs

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迷宫问题 bfs相关的知识,希望对你有一定的参考价值。

题目链接:迷宫问题 

天啦撸。最近怎么了。小bug缠身,大bug 不断。然这是我大腿第一次给我dbug。虽然最后的结果是。我............bfs入队列的是now..............

然后。保存路径的一种用的string 。一种用的数组。大同小异。根据就是我bfs 先搜到的绝壁就是步数最少的、

附代码:

pre 数组

技术分享
 1 
 5 
 6 #include   7 #include <string.h>  8 #include   9 #include  10 #include <string> 11 using namespace std; 12  13 struct Node { 14     int x, y; 15 }now, temp, ans; 16  17 int mp[10][10]; 18 int vis[10][10]; 19 Node que[210]; 20 Node pre[210]; 21  22 int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1}; 23  24 bool check(Node a) { 25     if (a.x >= 0 && a.x < 5 && a.y >= 0 && a.y < 5 && !vis[a.x][a.y] && mp[a.x][a.y] == 0) 26         return true; 27     return false; 28 } 29  30 int head = 0, tail = 0; 31  32 void bfs() { 33     while(head < tail) { 34         now = que[head++]; 35         if (now.x == 4 && now.y == 4) { 36             return; 37         } 38         for (int i=0; i<4; ++i) { 39             temp.x = now.x + dir[i][0]; 40             temp.y = now.y + dir[i][1]; 41  42             if (check(temp)) { 43                 que[tail++] = temp; 44                 vis[temp.x][temp.y] = 1; 45                 int id = temp.x * 5 + temp.y; 46                 pre[id].x = now.x, pre[id].y = now.y; 47             } 48         } 49     } 50 } 51  52 void outPre(int num) { 53     if (pre[num].x == -1 && pre[num].y == -1) 54         return; 55     else outPre(5*pre[num].x+pre[num].y); 56     cout << "(" << pre[num].x << ", " << pre[num].y << ")\\n"; 57 } 58  59 int main() { 60     head = 0, tail = 0; 61     memset(vis, 0, sizeof(vis)); 62  63     for (int i=0; i<5; ++i) { 64         for (int j=0; j<5; ++j) { 65             cin >> mp[i][j]; 66         } 67     } 68     now.x = 0, now.y = 0; 69     vis[0][0] = 1; 70     que[tail++] = now; 71     pre[0].x = -1, pre[0].y = -1; 72     bfs(); 73  74     outPre(24); 75     cout << "(4, 4)\\n"; 76     return 0; 77 }
View Code

string 

技术分享
 1 
 5 
 6 #include   7 #include <string.h>  8 #include   9 #include  10 #include <string> 11 using namespace std; 12  13 struct Node { 14     int x, y; 15     string ansStep; 16 }now, temp, ans; 17  18 int mp[10][10]; 19 int vis[10][10]; 20 Node que[210]; 21  22 int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1}; 23 bool check(Node a) { 24     if (a.x >= 0 && a.x < 5 && a.y >= 0 && a.y < 5 && !vis[a.x][a.y] && mp[a.x][a.y] == 0) 25         return true; 26     return false; 27 } 28  29 int head = 0, tail = 0; 30  31 void bfs() { 32     while(head < tail) { 33         now = que[head++]; 34         if (now.x == 4 && now.y == 4) { 35             now.ansStep += \\0; 36             ans.ansStep = now.ansStep; 37             return; 38         } 39         for (int i=0; i<4; ++i) { 40             temp.x = now.x + dir[i][0]; 41             temp.y = now.y + dir[i][1]; 42  43             if (check(temp)) { 44                 vis[temp.x][temp.y] = 1; 45                 temp.ansStep = now.ansStep; 46                 temp.ansStep += temp.x + 0; 47                 temp.ansStep += temp.y + 0; 48                 que[tail++] = temp; 49             } 50         } 51     } 52 } 53  54 int main() { 55     head = 0, tail = 0; 56     memset(vis, 0, sizeof(vis)); 57  58     for (int i=0; i<5; ++i) { 59         for (int j=0; j<5; ++j) { 60             cin >> mp[i][j]; 61         } 62     } 63     now.x = 0, now.y = 0; 64     now.ansStep += "00"; 65  66     vis[0][0] = 1; 67     que[tail++] = now; 68     bfs(); 69  70     string ansstr = ans.ansStep; 71     int len = ansstr.length(); 72     for (int i=0; i2
View Code

 

以上是关于迷宫问题 bfs的主要内容,如果未能解决你的问题,请参考以下文章

通过迷宫问题简单学习DFS和BFS算法

通过迷宫问题简单学习DFS和BFS算法

BFS(最短路径)—— 迷宫问题

使用BFS(广度优先搜索)解迷宫类问题

迷宫问题 (BFS ?输出路径)

AcWing 844. 走迷宫 (BFS模版题)