老鼠走迷宫(1)输出唯一路径(C语言)
需求
有一个迷宫,在迷宫的某个出口放着一块奶酪。将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪。请找出它的行走路径。
STEP 1 题目转化
我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁,用0表示通路。
老鼠每走到一个格子的时候就将该位置的值置为1,表示老鼠的行走路径包括这个格子。
STEP 2 编程思路
⑴这个题目可以用递归方法,只需要最后一步走到迷宫出口所在的格子。
⑵每一步测试上、下、左、右四个方向,选择一个方向前进。
STEP 3 要点整理
⑴走过的格子需要标记,否则无法输出路径。
⑵递归算法只需弄清递归出口(即结束条件)和分解后的问题,切忌想得太深太远。
----------------------------------华丽丽的分割线---------------------------代码君要出场了-------------------
#include <stdio.h>
int maze[][] = {
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
{, , , , , , , , },
}; //构建迷宫
int start_x = , start_y = ; //设置起点
int end_x = , end_y = ; //设置终点
int success = ;
int step(int x, int y);
int main(int argc, char argv[])
{
int x, y;
printf("maze:\n"); //打印迷宫图,为方便查看,将数字换为图形打印
for(x = ; x < ; x++)
{
for(y = ; y < ; y++)
{
if(maze[x][y] == )
printf("■");
else
printf("□");
}
printf("\n");
}
if(step(start_x, start_y) == )
{
printf("No way!\n");
}
else
{
printf("You are free!\n");
for(x = ; x < ; x++)
{
for(y = ; y < ; y++)
{
if(maze[x][y] == )
printf("■");
else if(maze[x][y] == )
printf("☆");
else
printf("□");
}
printf("\n");
}
}
printf("\n");
return ;
}
int step(int x, int y) //用递归算法求解路径
{
maze[x][y] = ;
if(x == end_x && y == end_y)
{
success = ;
}
if(success != && y < (LEN - 1) && maze[x][y + ] == ){step(x, y + );}
if(success != && x > 0 && maze[x][y - ] == ){step(x, y - );}
if(success != && x < (LEN - 1) && maze[x + ][y] == ){step(x + , y);}
if(success != && y > 0 && maze[x - ][y] == ){step(x - , y);}
if(success != )
{
maze[x][y] = ;
}
return success;
}
欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3885026.html,并注明转载。
作者bibibi_liuliu,联系方式395985239@qq.com
老鼠走迷宫(1)输出唯一路径(C语言)的更多相关文章
- 老鼠走迷宫II
转自:http://blog.csdn.net/holymaple/article/details/8636234 由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢? 解法 ...
- 老鼠走迷宫I
转自:http://blog.csdn.net/holymaple/article/details/8582517 说明:老鼠走迷宫是递回求解的基本提醒,我们在二维阵列中使用2来表示迷宫墙壁,使用1来 ...
- 老鼠走迷宫(2)输出所有路径(C语言)
需求 有一个迷宫,在迷宫的某个出口放着一块奶酪.将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪.请找出它的行走路径. STEP 1 题目转化 我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁, ...
- noj电子老鼠走迷宫(深搜dfs)超时错误
1042.电子老鼠闯迷宫 时限:1000ms 内存限制:10000K 总时限:3000ms 描述 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色 ...
- noj->电子老鼠走迷宫
00 问题 描述: 有一只电子老鼠被困在如下图所示的迷宫中.这是一个12*12单元的正方形迷宫,黑色部分表示建筑物,白色部分是路.电子老鼠可以在路上向上.下.左.右行走,每一步走一个格子.现给定一个起 ...
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...
- 洛谷P1238 走迷宫
洛谷1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个 ...
- NYOJ306 走迷宫(dfs+二分搜索)
题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...
- P1238 走迷宫
原题链接 https://www.luogu.org/problemnew/show/P1238 为了巩固一下刚学习的广搜,练一下迷宫类型的题 不过这道题我用的深搜..... 看问题,我们就知道这道题 ...
随机推荐
- SpringBoot入门学习(三)
基于第二讲,这一讲我们主要讲解包含以下内容 springBoot添加对freemarker的支持 使用@RestController处理ajax请求 使用@PathVariable注解获取url参数 ...
- iOS 动态调用方法
- (void)bugly { dispatch_async(dispatch_get_global_queue(0, 0), ^{ if (NSClassFromString(@"Bu ...
- CSS Backgrounds(背景)
CSS Backgrounds(背景) CSS 背景属性用于定义HTML元素的背景. CSS 属性定义背景效果: background-color background-image backgroun ...
- 20144303石宇森 《Java程序设计》第2周学习总结
---恢复内容开始--- 20144303 <Java程序设计>第2周学习总结 教材学习内容总结 一.类型: 1.Java可以区分为基本类型和类类型.类类型也称作参考类型. 2.Java中 ...
- 钓鱼WIFI搭建
1.无线网卡 2.KaliLinux操作系统,这里就不用说了,必备的 3.isc-dhcp-server服务器.安装好KaliLinux后只需要apt-get update 然后apt-get i ...
- 安装配置mariadb-10.1.19
本文参考:http://chenzehe.iteye.com/blog/1266260 感谢原作者的分享! 首先安装/更新一些编译时会用到的基础包 [root@localhost local]# y ...
- git 总结命令
git 命令 创建git版本库:git init 查看状态:git status 把文件添加到暂存区:git add 把文件提交到版本库:git commit -m "提交说明" ...
- Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused (Connection refused)
一.linux中配置redis,使用java连接测试时报错: Exception in thread "main" redis.clients.jedis.exceptions.J ...
- Browserify命令行参数
–outfile, -o: browserify日志打印到文件 –require, -r: 绑定模块名或文件,用逗号分隔 –entry, -e: 应用程序的入口 –ignore, -i: 省略输出 – ...
- spring @RequestMapping注解技巧
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一.这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上. 下面我们看看,@Request ...