迷宫问题
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 }
以上是关于迷宫问题的主要内容,如果未能解决你的问题,请参考以下文章