首页 / 算法 / 经典算法50例 老鼠走迷宫1,2
经典算法50例 老鼠走迷宫1,2
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了经典算法50例 老鼠走迷宫1,2,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2852字,纯文字阅读大概需要5分钟。
内容图文
![经典算法50例 老鼠走迷宫1,2](/upload/InfoBanner/zyjiaocheng/783/2e42b2e926dc446cae904d83971554ce.jpg)
本文来源和参考于经典算法50例。只不过把c换成java来实现。
老鼠走迷官(一)
说明
老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法
老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。
public static int[][] maze={{2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 2, 0, 2, 2},
{2, 2, 0, 2, 0, 2, 2},
{2, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2}};
public static int success=0;
public static void main(String[] args) {
System.out.println("显示迷宫:");
for (int i = 0; i <7 ; i++) {
for (int j = 0; j < 7; j++) {
if(maze[i][j]==2){
System.out.print("■");
}else if(maze[i][j]==0){
System.out.print("□");
}
}
System.out.println(" ");
}
int starti=1,startj=1;//1,1为入口。
visit(starti,startj);
if(success==0){
System.out.println("没有找到出口");
}else {
System.out.println("正确路线为○");
for (int i = 0; i <7 ; i++) {
for (int j = 0; j < 7; j++) {
if(maze[i][j]==2){
System.out.print("■");
}else if(maze[i][j]==0){
System.out.print("□");
}else if(maze[i][j]==1){
System.out.print("○");
}
}
System.out.println(" ");
}
}
}
public static int visit(int i,int j){
int endi=5,endj=5;
maze[i][j]=1;
if(i==endi&&j==endj){
success=1;
return success;
}
if(maze[i][j+1]==0) visit(i,j+1);
if(maze[i+1][j]==0) visit(i+1,j);
if(maze[i-1][j]==0) visit(i-1,j);
if(maze[i][j-1]==0) visit(i,j-1);
if (success!=1)
maze[i][j]=0;
return success;
}
老鼠走迷官(二)
说明
由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢?
解法
求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置继续递回就可以了,比求出单一路径还简单,我们的程式只要作一点修改就可以了。
public static int[][] maze=
{{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}};
public static int starti=1,startj=1;
public static int endi=7,endj=7;
public static int num=0;
public static void main(String[] args) {
show();
visit(1,1);
}
public static void show(){
System.out.println("显示迷宫:"+num);
for (int i = 0; i <9 ; i++) {
for (int j = 0; j < 9; j++) {
if(i==starti&&j==startj) {
System.out.print("△");
}else if(i==endi&&j==endj){
System.out.print("☆");
}else if(maze[i][j]==2){
System.out.print("■");
}else if(maze[i][j]==0){
System.out.print("□");
}else {
System.out.print("○");
}
}
System.out.println(" ");
}
}
public static void visit(int i,int j){
maze[i][j] = 1;
if(i==endi&&j==endj){
num++;
show();
}
if(maze[i][j+1]==0) visit(i,j+1);
if(maze[i+1][j]==0) visit(i+1,j);
if(maze[i-1][j]==0) visit(i-1,j);
if(maze[i][j-1]==0) visit(i,j-1);
maze[i][j]=0;
}
内容总结
以上是互联网集市为您收集整理的经典算法50例 老鼠走迷宫1,2全部内容,希望文章能够帮你解决经典算法50例 老鼠走迷宫1,2所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。