BFS 迷宫的最短路径

来源:互联网 发布:js select2默认不选中 编辑:程序博客网 时间:2024/05/16 06:45

scanf是我用过最恶心的输入,没有之一

#include <cstdio>#include <queue>#include <iostream>using namespace std;const int INF = 0x3f3f3f3f;int N, M;typedef pair<int, int> P;int sx, sy;int gx, gy;char Lu[1000][1000];int Hui[1000][1000];int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};int bfs(){queue<P> que;for (int i = 1; i <= N; i++)for (int j = 1; j <= M; j++)Hui[i][j] = INF;que.push(P(sx, sy));Hui[sx][sy] = 0;while (que.size()){P p = que.front();que.pop();if (p.first == gx && p.second == gy)break;for (int i = 0; i < 4; i++){int nx = p.first + dx[i], ny = p.second + dy[i];if (nx >= 1 && nx <= N && ny >= 1 && ny <= M && Lu[nx][ny] != '#' && Hui[nx][ny] == INF){que.push(P(nx, ny));Hui[nx][ny] = Hui[p.first][p.second] + 1;}}}return Hui[gx][gy];}int main(){scanf("%d %d", &N, &M);scanf("%*c");for (int i = 1; i <= N; i++){for (int j = 1; j <= M; j++)scanf("%c", &Lu[i][j]);scanf("%*c");}for (int i = 1; i <= N; i++)for (int j = 1; j <= M; j++){if (Lu[i][j] == 'S'){sx = i;sy = j;}if (Lu[i][j] == 'G'){gx = i;gy = j;}}int Yi = bfs();printf("%d\n", Yi);return 0;}


0 0