迷宫问题 广度优先搜索
#include<iostream>
#include<vector>
using namespace std;
int front = 0;
int rear = 0;
int dir[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };
struct Node {
int x;
int y;
int pre;
};
vector<Node> res(1000);
void bfs(int beginx, int beginy, int endx, int endy, vector<vector<int>> arr, vector<vector<int>>& visit) {
res[0].pre = beginx, res[0].y = beginy, res[0].pre = -1;
rear++;
visit[beginx][beginy] = 1;
while (front < rear) {
for (int i = 0; i < 4; i++) {
int newx = res[front].x + dir[i][0];
int newy = res[front].y + dir[i][1];
if (newx<0 || newx>endx || newy<0 || newy>endy || arr[newx][newy] == 1 || visit[newx][newy] == 1) {
continue;
}
res[rear].x = newx, res[rear].y = newy, res[rear].pre = front;
rear++;
visit[newx][newy] = 1;
if (newx == endx&&newy == endy) {
return;
}
}
front++;
}
}
void printnode(int num) {
if (num < 0) return;
printnode(res[num].pre);
cout << '(' << res[num].x << ',' << res[num].y << ')' << endl;
}
int main() {
int rows = 5;
int cols = 5;
vector<vector<int>> arr = { {0,1,0,0,0},{0,1,0,1,0},{0,0,0,0,0},{0,1,1,1,0},{0,0,0,1,0} };
vector<vector<int>> visit(rows);
for (int i = 0; i < rows; i++) {
visit[i].resize(cols);
}
bfs(0, 0, rows - 1, cols - 1, arr, visit);
printnode(rear - 1);
}