老鼠走迷宫(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 为了巩固一下刚学习的广搜,练一下迷宫类型的题 不过这道题我用的深搜..... 看问题,我们就知道这道题 ...
随机推荐
- “使用驱动器中J:的光盘之前需要将其格式化
不知道神马原因致使U盘无法打开——大家千万注意:以后遇见这种情况千万别格式化(当然如果你的U盘或者硬盘里没有重要东西那就另当别论),进入“开始-cmd”,因为我的U盘在电脑上读出来是J盘,所以在cmd ...
- 20145328 《Java程序设计》实验二实验报告
20145328 <Java程序设计>实验二实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 ...
- java语言学习笔记1
最近也在春节的节假日里,总是会有各种各样的事情出现,没有很完整的时间来学习java以及其他方面的知识. 从昨天开始有了完整的学习体系,我去娄老师推荐的极客学院网站开始学习java语言的语法.在假期之初 ...
- linux及安全第二周总结——20135227黄晓妍
实验部分: 首先运行结果截图 代码分析: Mypcb.h /* * linux/mykernel/mypcb.h * * Kernel internal PCB types * * Copyri ...
- LeetCode (262):Nim Game
You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...
- Centos为mysql开启binlog
1.查询mysql配置文件所在位置 2.编辑配置文件/etc/my.cnf 在文件尾部添加: log-bin=/var/lib/mysql/mysql-bin server-id=123454 (5 ...
- was控制台英文改成中文
在安装was的时候没有选中简体中文包,所以导致安装后的was控制台显示中文,但是没关系,我们还是通过界面配置来修改,使得控制台从英文变为中文 1.vnc远程到服务器2./opt/IBM/Install ...
- 用maven按环境打包SpringBoot的不同配置文件
利用maven按环境打包SpringBoot的不同配置文件 application-dev.properties对应开发环境 application-test.properties对应测试环境 app ...
- sonar总结--
maven的setting.xml 配置 https://www.cnblogs.com/javawebsoa/p/3206504.html
- Openssl VS编译方法
工具: 1. 编译环境win10+vs2015专业版 2. ActivePerl工具,官网下载链接:http://www.activestate.com/activeperl/downloads 3. ...