迷宫问题(二)-DFS解决

递归过程会自动利用栈,可以大大简化过程

#include<stdio.h>

#define N 10
int vis[N][N], done = 0;
char maze[N][N + 1];

int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

void dfs(int x, int y)
{
  int i;
  if(done || maze[x][y] == ‘#‘ || vis[x][y])
    return;
  if(maze[x][y] == ‘E‘) { //exit
    maze[x][y] = ‘*‘;
    done = 1;
    return;
  }
  maze[x][y] = ‘*‘;
  vis[x][y] = 1;
  for(i = 0; i < 4; i++)
    dfs(x + dx[i], y + dy[i]);
  if(!done) maze[x][y] = ‘!‘;
}
int main()
{
  int i;
  for(i = 0; i < 10; i++)
    gets(maze[i]);
  dfs(1, 1);
  for(i = 0; i < 10; i++)
    puts(maze[i]);
  return 0;
}
时间: 2024-12-09 06:04:49

迷宫问题(二)-DFS解决的相关文章

迷宫问题二 统计路径条数(dfs+回溯)

#include<iostream> using namespace std; char maze[100][100]; bool flag[100][100]; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; int m,n; int sum=0; void dfs(int x,int y) { if(maze[x][y]=='T'){sum++;return ;} for(int i=0;i<4;i++) { int nx=x+dx[i]; int

POJ - 3984 - 迷宫问题 (DFS)

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10936   Accepted: 6531 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表示能够走的路.仅仅能横着走或竖着走.不能斜着走

迷宫问题(DFS,BFS)

1 /******************************** 2 啊哈!算法 3 深度优先搜索算法 4 迷宫问题 5 输入: 6 5 4 7 0 0 1 0 8 0 0 0 0 9 0 0 1 0 10 0 1 0 0 11 0 0 0 1 12 1 1 4 3 13 14 输出:7 15 *********************************/ 16 #include<iostream> 17 #include<ctime> 18 19 using name

Mac OS使用技巧十二:解决APP Store更新、下载出错的问题

前面介绍了Mac OSX那么多强大的功能和各式各样的使用技巧,那么苹果系统有没有让人头疼的地方呢?恐怕APP Store的下载问题一直是困扰许多用户的永恒问题,为什么有的时候就可以下,为什么有的时候就不可以下?可能是因为网络问题,可能是因为系统bug,可能是因为没有翻墙,具体原因我们也不明了.最常见就是下面的情景,实际情况是,你特么去已购页面再试也是没用的. 这里我在网络上积累的多种常用方法和一些自己亲身的体会,来教大家几种解决APP Store无法下载的方法. 一.首先是修改DNS,系统偏好

SDUT1157:小鼠迷宫问题(bfs+dfs)

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1157 题目描述 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这m×n个房间中有一些房间是封闭的,不允许任何人进入.在迷宫中任何位置均可沿上,下,左,右4个方向进入未封闭的房间.小鼠a位于迷宫的(p,q)方格中,它必须找出一条通向小鼠b所在的(r,s)方格的路.请帮助小鼠a找出所有通向小鼠b的最短道路. 请编程对于给定

洛谷P1309——迷宫(傻瓜DFS)

题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下左右四种方式,每次只能移动一个方格.数据保证起点上没有障碍. 输入样例 输出样例 [数据规模] 1≤N,M≤5 题目描述 输入输出格式 输入格式: [输入] 第一行N.M和T,N为行,M为列,T为障碍总数.第二行起点坐标SX,SY,终点 坐标FX,FY.接下来T行,每行为障碍点的坐标. 输出格式:

用BFS和DFS解决圆盘状态搜索问题

人工智能课程的实验(我的解法其实更像是算法课程的实验) 用到的算法:深度优先搜索.宽度优先搜索(状态扩展的不同策略) 数据结构:表示状态的结构体.多维数组 (可能是最近做算法竞赛题的影响,这次并不像以前那样依赖类和面向对象了,而是用最简单(几乎没有封装)的数据表示方法和大量的全局变量来存储数据,用面向过程的写法,以快速解决某一问题为目的设计程序.安全性和可扩展性势必降低,有些技巧的使用也让代码变得难懂:但是代码简洁,节省运行的时间和空间开销,这应该就是算法竞赛更加看重的吧) 这次用了C++写了控

用DFS 解决全排列问题的思想详解

首先考虑一道奥数题目: □□□ + □□□ = □□□,要将数字1~9分别填入9个□中,使得等式成立.例如173+286 = 459.请输出所有合理的组合的个数. 我们或许可以枚举每一位上所有的数,然后判断每一位上的数需要互不相等且满足等式即可,但是用代码写出来需要声明9个变量且判断. 那么我们把这个问题考虑为一个求这个9个数的全排列问题,即可得到更优雅的解答方式. 首先我们考虑一个经典的全排列问题(<啊哈,算法>): 输入一个数,输出1~n的全排列. 现在我们考虑有1.2.3的3张扑克牌和编

leetcode-79-单词搜索(用dfs解决)

题目描述: 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单元格内的字母不允许被重复使用. 示例: board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCCED", 返回 true. 给定 word = "SEE",