1、理解
2、思路:
循环完之后就把24种方案都走了一遍。
3、代码实现
package com.yiheng.recursion;
/**
* 迷宫问题
*/
public class Maze2 {
//choice[0]=-1;choice[1]= 0:表示上走
//choice[0]= 1;choice[1]= 0:表示下走
//choice[0]= 0;choice[1]=-1:表示左走
//choice[0]= 0;choice[1]= 1:表示右走
//上->下->左->右
private static int[] choice=new int[]{
-1,0,1,0,0,-1,0,1};
public static void main(String[] args) {
//测试输出迷宫
int[][] maze = buildMaze(7, 8);
System.out.println("迷宫原型");
//打印迷宫。
for (int[] ints : maze) {
for (int anInt : ints) {
System.out.print("\t"+anInt);
}
System.out.println();
}
// 策略:
// 上下左右、下上左右
// 上下右左、下上右左
// 上左下右、....
// 上左右下、....
// 上右下左、....
// 上右左下、.... 一共24总方案,上、下、左、右、开头各6种。
//1、改变 走迷宫 的决策;交换 上->下->左->右 走的先后顺序;
for (int i = 0; i < 4; i++) {
System.out.println("第"+(i+1)+"个六种");
//建立一个新数组:用于保存choice数组。
int[] choice1 = new int[8];
// 不要使用choice1=choice; 如果把choice直接赋给choice1,choice改变时choice1也会跟着改变。
// 要使用System.arraycopy,这个方法是native方法,它可以实现数组的赋值。且choice改变时choice1 不会跟着改变。
//Object src(原数组) int srcPos(复制起始位置), Object dest(目标数组), int destPos(复制的起始位置), int length(长度)
System.arraycopy(choice, 0, choice1, 0, 8);
//第一个方向的选择
int a=choice[i*2];
int b=choice[i*2