Promble 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

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

(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)

问题链接:http://poj.org/problem?id=3984

问题分析:根据DFS算法的思想,再建立一个数组储存最少步数所走的路径,注意格式,逗号后面有个空格

AC代码

#include<iostream>
using namespace std;
int m[10][10],lx[100],ly[100],min1=9999999,vis[30][30],xe[100],ye[100];
//m记录地图,ly,lx记录路径;
int n[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };//4个方向
void DFS(int x, int y, int step)//x,y为当前位置,step为走到该位置花的步数
{if (x == 4 && y == 4)//判断是否到达终点{if (step < min1){min1 = step;//记录最小步数for (int i = 0; i < step; i++){xe[i] = lx[i];//记录所走的路径ye[i] = ly[i];}}return;}for (int i = 0; i < 4; i++)//从4个方向探索{int tx = x + n[i][0];int ty = y + n[i][1];if (tx < 0 || ty < 0 || tx>4 || ty>4)continue;//判断是否越界if (m[tx][ty] == 0 && vis[tx][ty] == 0)//判断是否访问过,能不能走{lx[step] = tx;//记录路径ly[step] = ty;vis[tx][ty] = 1;//标记访问DFS(tx, ty, step + 1);//探索下一步,步数加一vis[tx][ty] = 0;//回溯取消标记}}
}
int main()
{for (int i = 0; i < 5; i++)for (int j = 0; j < 5; j++)cin >> m[i][j];DFS(0, 0, 0);printf("(0, 0)\n");for (int i = 0; i < min1; i++){printf("(%d, %d)", xe[i], ye[i]);if (i < min1 - 1)printf("\n");}
}

(转发)DFS算法博客链接:https://www.cnblogs.com/OctoptusLian/p/7429645.html

POJ3904(dfs)相关推荐

  1. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  2. [C] [编程题]连通块(DFS解决)

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M 来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一) 题目描述 给一个01矩阵,1代表是陆地,0代表 ...

  3. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  4. usaco snail trails(dfs)

    dfs啊,我还写了好长时间,一天不如一天. /* ID:jinbo wu TASK: snail LANG:C++ */ #include<bits/stdc++.h> using nam ...

  5. usaco shuttle puzzle(dfs剪枝)

    这题一看我也以为找规律,然后无法下手之后又想到bfs最后看题解是用dfs大神dfs用的出神入化. 不过这题好像可以找规律. /* ID:jinbo wu TASK: shuttle LANG:C++ ...

  6. usaco street race(dfs)

    一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公 ...

  7. Forest Program dfs+tanjar仙人掌

    题目链接 CCPC2019 F题. 题意:给一颗仙人掌树,让你求每一个小环的边的个数,用快速幂即可求解. 思路:第一反应是tanjar乱搞,把每个环上的点取出来,类似于缩点的方法.但是忽然感觉dfs能 ...

  8. HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化

    题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...

  9. A and B and Lecture Rooms CodeForces - 519E LCA+dfs序

    看到这个题的第一个思路就是就是统计以每一个点为根的所有节点个数,然后具体就分情况讨论一下即可. 因为刚刚学习了dfs序,这个题就用了dfs序来通过进出时间戳来相减表示其为根的子节点个数. 分情况 我们 ...

最新文章

  1. 西门子smart200以太网通讯协议
  2. 人工智能领域的经典著作!
  3. SAP LSMW Standard Batch (Direct) Input 方式制作的LSMW工具导入OPEN PO 单据时候’税码’字段的处理
  4. matlab教程lqg函数与收敛速度,科学网—Matlab编写由加速度积分得到速度和位移函数 - 王德才的博文...
  5. Docker最佳实践-部署LNMP环境
  6. [云炬创业基础笔记]第二章创业者测试6
  7. 基础补充和加强——希望对后来的人有所帮助
  8. SDCC 2016数据库峰会(深圳站)学习笔记
  9. LeetCode 240. 搜索二维矩阵 II(二分查找 分治)
  10. linux 命令查看块设备,系统运维|用 Linux blkid 命令查找块设备详情
  11. python虚函数_Python进阶话题杂谈(十三)纯虚函数与抽象基类
  12. BigDecimal 转 String
  13. JAVA手机接码平台源码
  14. 学计算机仓库管理一定打字吗,仓库管理员要会电脑吗?需要哪些电脑操作呢?...
  15. Gameplay - 多人游戏关卡设计
  16. maya怎么导出abc格式_maya导入abc文件到UE4
  17. 树莓派小车————全部代码
  18. GBase 8c开发接口简述
  19. Excel表格自动化办公(持续更新)
  20. md文件 linux,MD 文件扩展名: 它是什么以及如何打开它?

热门文章

  1. CF1100F Ivan and Burgers(线性基)
  2. YBTOJ:卖猪问题(网络流)
  3. Loj#3026-「ROIR 2018 Day1」管道监控【Trie,费用流】
  4. P7324-[WC2021]表达式求值【dp】
  5. codeforces1485 F. Copy or Prefix Sum(dp)
  6. 纪中A组模拟赛总结(2021.7.12)
  7. 【单调栈】奶牛的歌声(jzoj 1256)
  8. [XSY] 计数(DP,NTT,分治)
  9. 节操大师 北方大学生程序设计竞赛 南开大学
  10. JS原型链与instanceof底层原理