迷宫最短路径 问题
/* 迷宫最短路径 问题 */ #include<iostream> #include<queue> #include<cstring> using namespace std; struct Node{ int x, y; Node(int x,int y) { this->x = x; this->y = y; } }; const int N = 15; int map[9][9]= {1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1}; int d[N][N], book[N][N]; int next[][2] = {{-1,0},{0,1},{1,0},{0,-1}}; int endx, endy; int n, m; void bfs(int x,int y) ; int main() { int beginx, beginy; while (cin >> beginx >> beginy) { cin>> endx >> endy; memset(book,0,sizeof(book)); memset(d,0,sizeof(d)); n = 8, m = 8; bfs(beginx,beginy); cout << d[endx][endy] << endl; } } void bfs(int x,int y) { queue<Node> p; Node q(x,y); p.push(q); d[x][y] = 0; book[x][y] = 1; while (!p.empty()) { q = p.front(); p.pop(); if (q.x == endx && q.y == endy) return ; int v, u; for (int i = 0; i < 4; i++) { v = q.x + next[i][0]; u = q.y + next[i][1]; if (v >= 0 && v <= n && u >= 0 && u <= m && book[v][u] == 0 && map[v][u] == 0) { book[v][u] = 1; d[v][u] = d[q.x][q.y] + 1; // q = Node(v,u); p.push(Node(v,u)); } } } return ; }