迷宫问题

Posted Penn000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迷宫问题相关的知识,希望对你有一定的参考价值。

标题: 迷宫问题
时 限: 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\n", s[i].y, s[i].x);
32                 printf("%d %d\n", 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 }

 

以上是关于迷宫问题的主要内容,如果未能解决你的问题,请参考以下文章

迷宫问题

迷宫问题代码

关于回溯java的迷宫解析问题

跪求高手 数据结构迷宫问题

数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)

超详解的迷宫问题(Java版)