迷宫问题

标题: 迷宫问题
时 限: 100000 ms
内存限制: 100000 K
总时限: 10000 ms
描述:
迷宫问题
 
迷宫是一个二维矩阵,其中1为墙,0为路,3为入口,4为出口.要求从入口开始,从出口结束,按照 下,左,上,右 的顺序来搜索路径.
输入:
迷宫宽度w 迷宫高度h
迷宫第一行
迷宫第二行
...
迷宫第h 行
输出:
入口横坐标1  入口纵坐标1
横坐标2       纵坐标2
横坐标3       纵坐标3
横坐标4       纵坐标4
...
横坐标n-1    纵坐标n-1
出口横坐标n 出口纵坐标n
输入样例:
8 10
1 1 1 1 1 1 1 1
1 0 1 1 0 1 0 1
1 0 1 0 0 1 0 1
1 1 0 3 1 0 1 1
1 0 0 1 0 0 4 1
1 0 0 0 0 1 1 1
1 0 1 0 0 1 0 1
1 0 1 0 0 0 1 1
1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1
输出样例:
3 3
2 3
2 4
2 5
3 5
3 6
3 7
4 7
4 6
4 5
4 4
5 4
6 4
 
提示:

使用栈

参见教材 50 页

 1 //2016.10.24
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 
 6 using namespace std;
 7 
 8 const int N = 1005;
 9 int maze[N][N], book[N][N], top, n, m;
10 int dx[4] = {1, 0, -1, 0};
11 int dy[4] = {0, -1, 0, 1};
12 struct point
13 {
14     int x, y;
15 }s[N<<4];
16 
17 void dfs()
18 {
19     bool fg;
20     while(1)
21     {
22         fg = false;
23         for(int i = 0; i < 4; i++)
24         {
25             int nx = s[top].x + dx[i];
26             int ny = s[top].y + dy[i];
27             if(nx < 0 || nx >= n ||ny < 0 || ny >= m)continue;
28             if(maze[nx][ny] == 4)
29             {
30                 for(int i = 0; i <= top; i++)
31                       printf("%d %d
", s[i].y, s[i].x);
32                 printf("%d %d
", ny, nx);
33                 return ;
34             }
35             if(maze[nx][ny]==0&&book[nx][ny]==0){
36                 top++;
37                 fg = true;
38                 s[top].x = nx;
39                 s[top].y = ny;
40                 book[nx][ny] = 1;
41                 break;
42             }
43         }
44         if(!fg)top--;
45     }
46 }
47 
48 int main()
49 {
50     int bx, by, ex, ey;
51     scanf("%d%d", &m, &n);
52     for(int i = 0; i < n; i++){
53         for(int j = 0; j < m; j++){
54             scanf("%d", &maze[i][j]);
55             if(maze[i][j] == 3){
56                 bx = i; by = j;
57             }
58             if(maze[i][j] == 4){
59                 ex = i; ey = j;
60             }
61         }
62     }
63     memset(book, 0, sizeof(book));
64     top = 0;
65     s[top].x = bx, s[top].y = by;
66     dfs();
67 
68     return 0;
69 }
原文地址:https://www.cnblogs.com/Penn000/p/6002055.html