zoukankan      html  css  js  c++  java
  • poj3984迷宫问题(dfs+stack)

    迷宫问题
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 35426   Accepted: 20088

    Description

    定义一个二维数组: 

    int maze[5][5] = {
    0, 1, 0, 0, 0,
    0, 1, 0, 1, 0,
    0, 0, 0, 0, 0,
    0, 1, 1, 1, 0,
    0, 0, 0, 1, 0,
    };

    它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

    Input

    一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

    Output

    左上角到右下角的最短路径,格式如样例所示。

    Sample Input

    0 1 0 0 0
    0 1 0 1 0
    0 0 0 0 0
    0 1 1 1 0
    0 0 0 1 0

    Sample Output

    (0, 0)
    (1, 0)
    (2, 0)
    (2, 1)
    (2, 2)
    (2, 3)
    (2, 4)
    (3, 4)
    (4, 4)
    题意:给出一个迷宫矩阵,输出一条通路
    题解:dfs找到一条通路,并用栈记录(poj用万能头文件会CE emmmm)
     1 #include<cstdio>
     2 #include<cstring>
     3 #include<string>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<algorithm>
     7 #include<map>
     8 #include<set>
     9 #include<queue>
    10 #include<vector>
    11 #include<stack>
    12 using namespace std;
    13 int a[20][20];
    14 const int n=5;
    15 stack <pair<int,int> >stk;
    16 bool dfs(int i,int j) {
    17     if(i==n-1&&j==n-1) {
    18         stk.push(make_pair(i,j));
    19         return true;
    20     }
    21     if (i >= 0 && i <= n - 1 && j >= 0 && j <= n - 1) { // 判断边界
    22         if (a[i][j] == 0) { // 可以走且没走过
    23             a[i][j] = 1;// 表示走过
    24             if (dfs(i, j + 1) || dfs(i + 1, j) || dfs(i, j - 1) || dfs(i - 1, j)) { // 接着走
    25                 stk.push(make_pair(i,j));
    26                 return true;
    27             } else { // 回溯
    28                 a[i][j] = 0;
    29                 return false;
    30             }
    31         } else {
    32             return false;
    33         }
    34     } else {
    35         return false;
    36     }
    37 }
    38 int main() {
    39     for(int i=0; i<5; i++) {
    40         for(int j=0; j<5; j++) {
    41             scanf("%d",&a[i][j]);
    42         }
    43     }
    44     dfs(0,0);
    45     while(!stk.empty()) {
    46         printf("(%d, %d)
    ",stk.top().first,stk.top().second);
    47         stk.pop();
    48     }
    49     return 0;
    50 }


  • 相关阅读:
    minicap编译示例
    uniapp H5项目中使用腾讯地图sdk
    腾讯地图打车乘客端小车平滑移动-安卓篇
    地图定位打卡功能示例
    腾讯位置服务个性化图层创建及发布
    腾讯位置服务GPS轨迹回放
    使用腾讯地图实现汽车沿轨迹行驶功能
    地图GPS轨迹录制
    腾讯地图实现微信小程序地图定位教程
    基于腾讯地图定位组件实现周边POI远近排序分布图
  • 原文地址:https://www.cnblogs.com/fqfzs/p/9883770.html
Copyright © 2011-2022 走看看