zoukankan      html  css  js  c++  java
  • POJ 3984(DFS入门题 +stack储存路径)

    POJ 3984

    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)

     1 //个人对DFS的体会:通过递归和带调用栈实现了回溯;
     2 //记录路径:不断的调用栈和相继出栈,从后往前的把数据压入栈中;
     3 #include<bits/stdc++.h>  //POJ中使用这个头文件会CE;
     4 using namespace std;
     5 
     6 int n=5;
     7 int a[7][7];
     8 stack<pair<int,int>> stk;
     9 
    10 //写DFS函数的时候一定要清晰每一种情况,每一个的循环条件要准确
    11 bool DFS(int i, int j)
    12 {
    13     if(i==n-1&&j==n-1){
    14         stk.push(make_pair(i,j));
    15         return true;
    16     }
    17 
    18 
    19     if(a[i][j]==0&&i>=0&&j>=0&&i<=n-1&&j<=n-1)
    20     {
    21         a[i][j]=1;     //表示这条路在后面的循环中不会再重复走了;
    22         if(DFS(i,j+1)||DFS(i+1,j)){
    23             stk.push(make_pair(i,j));
    24             return true;
    25         }
    26         else
    27             return false;
    28     }
    29     return false;
    30 
    31 }
    32 int main()
    33 {
    34     memset(a, -1, sizeof(a));
    35     for(int i=0; i<n; i++)
    36         for(int j=0; j<n; j++)
    37             cin>>a[i][j];
    38 
    39     DFS(0,0);
    40 
    41     while(stk.size()){
    42         printf("(%d, %d)
    ",stk.top().first,stk.top().second);
    43         stk.pop();
    44     }
    45 
    46     return 0;
    47 }
  • 相关阅读:
    #Leetcode# 876. Middle of the Linked List
    #Leetcode# 237. Delete Node in a Linked List
    #Leetcode# 234. Palindrome Linked List
    #Leetcode# 149. Max Points on a Line
    #Leetcode# 152. Maximum Product Subarray
    #Leetcode# 228. Summary Ranges
    #Leetcode# 227. Basic Calculator II
    PAT 1089 狼人杀-简单版
    linux——web安全之sql注入【预习阶段】
    linux——攻防技术介绍|主动攻击|被动攻击
  • 原文地址:https://www.cnblogs.com/Yokel062/p/10193347.html
Copyright © 2011-2022 走看看