递归问题:一穿越迷宫

迷宫问题的解决涉及到大量的试探和失败:选择一条路径,在无法前景时折回,并选择其他还未尝试过的路径。使用递归能够很好的处理这类问题。

package com.chingcloud.test01;

public class Maze {
private final int TRIED = 3 ;
private final int PATH = 7 ;
private int[][] grid = {{1,1,1,0,1,1,0,0,0,1,1,1,1},
{1,0,1,1,1,0,1,1,1,1,0,0,1},
{0,0,0,0,1,0,1,0,1,0,1,0,0},
{1,1,1,0,1,1,1,0,1,0,1,1,1},
{1,0,1,0,0,0,0,1,1,1,0,0,1},
{1,0,1,1,1,1,1,1,0,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1}} ;

public boolean traverse(int row,int column){
boolean done = false ;
if(valid(row,column)){
grid[row][column] = TRIED ;
if(row == grid.length-1 && column == grid[0].length-1){
done = true ;
}else{
done = traverse(row+1,column) ;
if(!done){
done = traverse(row,column+1) ;
}
if(!done){
done = traverse(row-1,column) ;
}
if(!done){
done = traverse(row,column-1) ;
}
}
if(done){
grid[row][column] = PATH ;
}
}
return done ;
}
public boolean valid(int row,int column){
boolean result = false ;
if(row>=0 && row<grid.length && column>=0 && column<grid[row].length){
if(grid[row][column]==1){
result = true ;
}
}
return result ;
}
public String toString(){
String result = "\n" ;
for(int row=0;row<grid.length;row++){
for(int column=0;column<grid[row].length;column++){
result += grid[row][column] + "" ;
}
result += "\n" ;
}
return result ;
}
public static void main(String[] args) {
Maze labyrinth = new Maze() ;
System.out.println(labyrinth);
if(labyrinth.traverse(0,0)){
System.out.println("The maze was successfully traversed!");
}else{
System.out.println("There is no possible path.");
}
System.out.println(labyrinth);
}
}

result

1110110001111
1011101111001
0000101010100
1110111010111
1010000111001
1011111101111
1000000000000
1111111111111

The maze was successfully traversed!

7770110001111
3077707771001
0000707070300
7770777070333
7070000773003
7077777703333
7000000000000
7777777777777

时间: 2024-09-17 14:33:24

递归问题:一穿越迷宫的相关文章

c语言-哪位大神能帮忙解释一下这下面的迷宫随机生成函数吗?

问题描述 哪位大神能帮忙解释一下这下面的迷宫随机生成函数吗? void create(int xint y) //随机生成迷宫{ int c[4][2]={01100-1-10}; //四个方向 int ijt; //将方向打乱 for(i=0;i<4;i++) { j=rand()%4;//随机生成函数,这里的作用是随机生成j t=c[i][0];c[i][0]=c[j][0];c[j][0]=t; t=c[i][1];c[i][1]=c[j][1];c[j][1]=t; } map[x][y

基于C语言实现的迷宫游戏代码_C 语言

本文实例讲述了基于C语言实现迷宫游戏的方法,代码备有较为详尽的注释,便于读者理解.通过该游戏代码可以很好的复习C语言的递归算法与流程控制等知识,相信对于学习游戏开发的朋友有一定的借鉴价值. 完整的实例代码如下: #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #define N 20/*迷宫的大小,可改

马文·明斯基:一颗人工智能巨星的陨落

他,最早联合提出了"人工智能"概念,被尊为人工智能之父: 他,是人工智能领域首位图灵奖获得者: 他,是世界上第一个人工智能实验室MIT人工智能实验室联合创始人: 他,还是虚拟现实的最早倡导者: 他,影响了阿西莫夫的机器人三大定律: 他的代表作<情感机器>构建了未来会思考的机器人的蓝图,影响了无数人工智能领域专家学者:他就是那位在人工智能60年历史中一直熠熠生辉的权威--马文·明斯基. 这位致力于创造情感机器的巨人,人工智能之父,于1月24日晚在美国波士顿逝世,享年88岁.我

环境也能强化学习,智能体要找不着北了,UCL汪军团队提出环境设计的新方法

雷锋网 AI 科技评论按:提到"强化学习",大家都知道这是一种让智能体寻找优化策略.从而与环境互动获得奖励的半监督学习方法.但是在汪军教授看来,强化学习的应用领域不止如此. 在刚刚结束的CCF-GAIR 2017大会中,来自伦敦大学学院 UCL 计算机系的汪军教授在自己的演讲 如何进行大规模多智体强化学习? - 雷锋网(公众号:雷锋网) 中提到了一类他们团队最近正在研究的环境设计问题,比如宜家希望自己店铺空间设计优化,优化目标可以是环境中不同位置的人流量平均,这样各个地方摆放的商品都可

《机器人爱好者(第3辑)》——牛人大咖眼里的人工智能

牛人大咖眼里的人工智能 比尔•盖茨.斯蒂芬•霍金.埃隆•马斯克,以及其他一些科技界的头面人物,纷纷不约而同地表达了对人工智能可能在不久的将来接管人类的忧虑.他们可不是愚昧无知.只图一时口快的人. 这些人并不会因为自己关于人工智能的言论而获得什么私利.他们要么是亲自,要么是手下有人,对高级人工智能和机器智能做过研究.他们的警告和忧虑背后,有着坚实的科学依据.他们有的是高科技工业巨头,有的是著名科学家,但都认同这样的观点:在缺乏理性且负责任的防护措施下发展高级人工智能,很可能是在给人类自身铺设毁灭之

迷宫求解非递归 DFS BFS(应用栈和队列)

栈和队列的应用对迷宫问题求解 没有递归 自己手动建的栈和队 并且输出路径 DFS的路径就是 栈中的坐标 BFS的路径在队又开了一个域存上一层的base值 语言还是用的C++ 感觉比C的封装性好很多 充分体会了一下DFS一边比BFS快 但是BFS是最优解而DFS可能不是最优解   #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace

递归算法-C:用递归及非递归解决迷宫问题

问题描述 C:用递归及非递归解决迷宫问题 以下是现有的代码,但是递归放在里面出现错误,求大神给我改改. #include #include #define N 39 #define M 39 int X; int maze[N+2][M+2]; /******递归函数定义*******/ typedef struct { int x,y; }Dj; Dj move[4]; /******非递归函数定义*******/ struct point{ int row,col,predecessor;

栈的应用——迷宫问题

这里结合了栈+深度优先算法+回溯,难点在搜索迷宫路径 一 搜索迷宫路径思想如下: 从迷宫入口进入之后,从这里开始搜索其上下左右是否有障碍,如不是障碍就移动到这个位置上,并把该位置入栈,并从它开始继续搜索,若是障碍就选择另外一个方向,为了防止出现重复搜索,定义一个与迷宫大小相等的标记数组,将有障碍的和已经走过的位置标记为1(障碍),同时保留搜索的路径痕迹,在搜索下一个位置之前,将当前位置保存在栈中,如果所有相邻的非障碍位置都被搜索过仍未找到通往出口的路径,回退到上次的位置,并把回退前位置标记消除,

杭电 1272 poj 1308 小希的迷宫

这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正. 1.题目概览 这道题是杭电1272,POJ 1308如果写好了代码可以试一试. 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s