【递归】走迷宫

走迷宫

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

判断是否能从迷宫的入口到达出口

输入:

先输入两个整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。

输出:

若能到达,则输出"Yes",否则输出"No",结果占一行。

输入样例:

3 3
0 0
2 2
0 0 0
1 1 0
0 1 0

输出样例:

Yes

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int a[10000][10000],h,l;
 4 void search(int i,int j)
 5 {
 6     if(a[i][j]==0)
 7     {
 8         a[i][j]=2;
 9         if(j-1>=0)
10             search(i,j-1);
11         if(i+1<h)
12             search(i+1,j);
13         if(j+1<l)
14             search(i,j+1);
15         if(i-1>=0)
16             search(i-1,j);
17     }
18 }
19 int main()
20 {
21     scanf("%d %d",&h,&l);
22     int i,j,m,n;
23     scanf("%d %d",&i,&j);
24     scanf("%d %d",&m,&n);
25     int t,b;
26     for(t=0; t<h; t++)
27         for(b=0; b<l; b++)
28             scanf("%d",&a[t][b]);
29     search(i,j);
30     if(a[m][n]==2)
31         printf("Yes\n");
32     else
33         printf("No\n");
34     return 0;
35 }
时间: 2024-10-13 11:15:28

【递归】走迷宫的相关文章

青蛙走迷宫问题(体力值)

题目: 青蛙走迷宫,1代表路通,0代表不通:起点是(0, 0),终点是(0,m - 1);青蛙每次向上走需要消耗体力值为3,向下走不消耗体力值,平走消耗体力值1:根据给定值判断青蛙是否可以根据初始值到达终点,并求出消耗体力值最少的路径: 举例: n = 4, m =4, p = 10(体力值) 4 4 10 1 0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 则结果为:[[0, 0], [1, 0], [1, 1], [2, 1], [2, 2], [2, 3], [1, 3], [

算法:老鼠走迷宫问题

算法:老鼠走迷宫问题(初) [写在前面] 老鼠走迷宫问题的递归实现,是对递归思想的一种应用. [问题描述] 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图.给定入口位置和出口位置,判断之间是否存在通路并显示出走出迷宫的道路. [代码] 对题目的描述部分 int migo[7][7]={ {2, 2, 2, 2, 2, 2, 2}, {2, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 0, 2, 0, 2}, {2, 0, 0, 0, 0, 2, 2},

第四章 搜索(深度、广度搜索、全排列、走迷宫、再解炸弹人、宝岛探险、水管工游戏)

一.深度优先搜索DFS 深度优先搜索DFS的关键思想是:当下应该怎么做(每个方法都试一遍),这一步解决后,进入下一步,下一步的解决方法和这一步的解决方法是一样的 DFS的基本模型 void dfs(int step) { 判断边界 尝试每一种可能  for(i=1;i<=n;i++) { 继续下一步 dfs(step+1) } 返回 } 1.1全排列 1 //输入一个数n 2 //输出1-n的全排列 3 #include <stdio.h> 4 int n, book[10], a[10

老鼠走迷宫

1 /*说明:老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用 2 表示迷宫墙 2 壁,使用 1 来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 3 解法:老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选一个方向前进, 4 无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到 5 出口为止,这是递回的基本题. 6 */ 7 //在数组的初始化中可以画你的地图 8 #include<stdio.h> 9 #include<stdlib.h>

老鼠走迷宫全部路径

以下程序打印出老鼠走迷宫全部的路径: #include<stdio.h> #define LEN 9 int maze[9][9] = { {2, 0, 2, 2, 2, 0, 2, 2, 2}, {2, 0, 2, 2, 2, 0, 0, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 2, 0, 2, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2, 0, 2}, {2, 0

走迷宫(深度优先遍历)

●问题描述: 给出一个矩阵,其中0表示通路,1表示墙壁,这样就形成了一个迷宫,要求编写算法求出其中路径. ●递归思路: 编写一个走迷宫函数,传入二位数组的下标,先假设该点位于最终路径上(将0置为3)再探测周围四个点是否可以走通(是否为0),如果可以走通则将该点四周能走通的点作为函数参数传入函数进入递归.若四周均不能走通(都不为0时)则将该点置回0表示该点不是最终路径上的点. 在此思路中递归进入时表示了枚举路径,当发现此条路径走到某处再不能走通时就将路径该点置回0并且递归退出(回溯)寻找下一条可走

递归解迷宫的问题

突然兴起递归解决了走迷宫问题,对递归的本质加深了印象,一开始用到了STL的set容器,stl容器是排序容器,如果装载自定义对象的时候需要自定义排序函数,最后选择了用向量vector存储路径,vector有队列的性质. 解迷宫的递归流程是,检测四个方向是否可走,遇到死路则原路递归返回false,遇到出口则返回true,并将来的路线保存进队列. #include <Windows.h> #include <stdio.h> #include <stdlib.h> #incl

ACM:图的BFS,走迷宫

题目: 一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示),要么是障碍物(用0来表示).你的任务是找一条从起点到终点的最短移动序列,其中UDLR分别表示往上.下.左.右移动到相邻单元格.任何时候都不能在障碍格中,也不能走到迷宫之外.起点和终点保证是空地. 分析:图的BFS. #include <iostream> #include <string> #include <queue> using namespace std; const int MAXN

老鼠走迷宫(1)输出唯一路径(C语言)

需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁,用0表示通路. 老鼠每走到一个格子的时候就将该位置的值置为1,表示老鼠的行走路径包括这个格子. STEP 2 编程思路 ⑴这个题目可以用递归方法,只需要最后一步走到迷宫出口所在的格子. ⑵每一步测试上.下.左.右四个方向,选择一个方向前进. STEP 3 要点整理 ⑴走过的格子需要标记,否则无法输出