迷宫问题

来源:互联网 发布:qq smtp服务器发送端口 编辑:程序博客网 时间:2024/06/17 04:08
Time Limit: 1000 ms   Case Time Limit: 1000 ms   Memory Limit: 64 MB
Total Submission: 36   Submission Accepted: 9
Description
由M行N列的方格构成一个迷宫,相邻方格之间可能是相通的,也可能有隔墙,各方格位置由对应坐标确定。在(1,1)处由入口,在(M,N)处有一个出口,在入口和出口之间有路相通,求从入口到出口的最短路径,若无法到达,输出“-1”

Input
第1行有两个整数,M,N(2<=M,N<=10), 接下来是M*N的0,1矩阵 0表示通路,1表示墙(数据保证入口和出口为通路)。

Output
输出最短路径

Sample Input
OriginalTransformed
6 80  0  1  0  0  0  1  11  0  0  0  1  0  0  00  0  0  1  1  0  1  11  1  0  1  0  0  0  0 0  0  0  0  0  1  0  11  0  1  0  0  0  0  0
6[SP]8[EOL] 0[SP][SP]0[SP][SP]1[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]1[SP][SP]1[EOL] 1[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]1[SP][SP]0[SP][SP]0[SP][SP]0[EOL] 0[SP][SP]0[SP][SP]0[SP][SP]1[SP][SP]1[SP][SP]0[SP][SP]1[SP][SP]1[EOL] 1[SP][SP]1[SP][SP]0[SP][SP]1[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]0[SP][EOL] 0[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]1[SP][SP]0[SP][SP]1[EOL] 1[SP][SP]0[SP][SP]1[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]0[SP][SP]0[EOF] 

Sample Output
OriginalTransformed
12

12[EOL] [EOF] 



#include<cstdio>#include<iostream>#include<cstring>#include<queue>//#define DEBUGusing namespace std;const int maxn = 15;int map[maxn][maxn];int dis[maxn][maxn];bool flag[maxn][maxn];bool result;int dir[][2] = { { 1,0 },{ -1,0 },{ 0,1 },{ 0,-1 } };int main() {#ifdef DEBUGfreopen("Text.txt", "r", stdin);#endif // DEBUGint n, m;while (cin >> n >> m) {queue< pair<int, int> >q;int i, j;for (i = 1; i <= n; i++)for (j = 1; j <= m; j++)cin >> map[i][j];memset(flag, 0, sizeof(flag));memset(dis, 0, sizeof(dis));q.push(pair<int, int>(1, 1));flag[1][1] = 1;dis[1][1] = 0;result = 0;while (!q.empty()) {int x = q.front().first;int y = q.front().second;q.pop();if (x == n&&y == m) {result = 1;break;}for (i = 0; i < 4; i++) {int xx = x + dir[i][0];int yy = y + dir[i][1];if (xx <= n&&xx > 0 && yy <= m&& yy > 0&& !flag[xx][yy]&&!map[xx][yy]) {q.push(pair<int, int>(xx, yy));dis[xx][yy] = dis[x][y] + 1;flag[xx][yy] = 1;}}}if (result)cout << dis[n][m] << endl;elsecout << -1 << endl;}return 0;}

0 0
原创粉丝点击