zoukankan      html  css  js  c++  java
  • 迷宫问题

    标题: 迷宫问题
    时 限: 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 }
  • 相关阅读:
    UNIX环境高级编程——Linux终端设备详解
    UNIX网络编程——网络IPC:套接字
    UNIX网络编程——Socket通信原理和实践
    UNIX环境高级编程——单实例的守护进程
    UNIX环境高级编程——初始化一个守护进程
    UNIX环境高级编程——创建孤儿进程
    UNIX环境高级编程——实现uid to name
    UNIX环境高级编程——标准IO-实现查看所有用户
    自考-数据库及应用
    自考-数据库及应用
  • 原文地址:https://www.cnblogs.com/Penn000/p/6002055.html
Copyright © 2011-2022 走看看