迷宫问题
程序员文章站
2022-05-08 22:13:09
...
public class Maze {
public static void main(String[] args) {
// 模拟迷宫
int[][] map = new int[8][7];
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
for (int i = 0; i < 8; i++) {
map[i][0] = 1;
map[i][6] = 1;
}
map[3][1] = 1;
map[3][2] = 1;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
System.out.println("小球走过");
setWay(map,1,1);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
// 1.map表示地图
// 2.i,j表示出发位置
// 3.如果到达map[6][5]则说明到达
// 4.约定:当map[i][j]为0表示该点没有走过,当为1表示墙,2表示可以走,3表示该点已经走过,但是走不通
// 5.在走迷宫时,需要确定一个策略,下->右->上->左,如果该点不通,再回溯
/**
*
* @param map 地图
* @param i 从哪个位置开始找
* @param j
* @return 找到返回true,否则返回false
*/
public static boolean setWay(int[][] map, int i, int j){
if (map[6][5] == 2){
return true;
} else {
if (map[i][j] == 0){ //如果未走
map[i][j] = 2;
if (setWay(map, i+1, j)){
return true;
} else if(setWay(map, i, j+1)){
return true;
}else if(setWay(map, i-1, j)){
return true;
}else if(setWay(map, i, j-1)){
return true;
} else {
map[i][j] = 3;
return false;
}
} else {
return false;
}
}
}
}
上一篇: P2320 [HNOI2006]鬼谷子的钱袋(想法)
下一篇: 递归的(个人)超详细讲解
推荐阅读
-
带着问题读CLR via C#(笔记一)CLR的执行模型
-
C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例
-
解决springmvc关于前台日期作为实体类对象参数类型转换错误的问题
-
解决java数值范围以及float与double精度丢失的问题
-
NanoStudio怎么用?NanoStudio使用方法及常见问题
-
Android 解决ScrollView嵌套CridView显示问题
-
错误1406 无法将数值写入键/Software/Classess/.htm/OpenWithList/devenv.exe问题的解
-
用一句SQL解决SQL中断号问题 推荐
-
MSSQL 将截断字符串或二进制数据问题的解决方法
-
用SQL语句解决mysql导入大数据文件的问题