public class Demo {
public static void main(String[] args) {
int[][] map = new int[7][7];
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[6][i] = 1;
}
for (int j = 0; j < 6; j++) {
map[j][0] = 1;
map[j][6] = 1;
}
map[2][1] = 1;
map[2][2] = 1;
for (int[] ints : map) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
int count = 0;
findWay(map, 1, 1);
//输出迷宫
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (map[i][j] == 2) {
count++;
}
System.out.print(map[i][j] + "\t");
}
System.out.println();
}
System.out.println(count);
}
/**
* 1代表围墙 2代表能够走通 0代表改路没又走过 3代表路走不通
*
* @param map 地图
* @param i 确认的横坐标
* @param j 确认的竖坐标
* @return
*/
public static Boolean findWay(int[][] map, int i, int j) {
//定义终点
if (map[5][5] == 2) {
return true;
} else {
if (map[i][j] == 0)//从起点开始,假设这个点能够走通
{
map[i][j] = 2;
//指定走的方法 上-右-下-左
if (findWay(map, i-1, j )) {//往上走
return true;//如果能走通返回true
} else if (findWay(map, i , j+1)) {//往右走
return true;
} else if (findWay(map, i+1, j )) {//往下走
return true;
} else if (findWay(map, i , j-1)) {//往左走
return true;
} else {
map[i][j] = 3;//如果所有路线都不行,把该点置为3
return false;
}
}else {
return false;
}
}
}
}
八皇后问题
public class Demo {
int maxSize = 8;
int[] arr = new int[maxSize];
public static void main(String[] args) {
Demo demo = new Demo();
demo.show(0);
}
//产生递归
public void show(int n){
if(n==maxSize){//代表放到最后
print();//输出结果
return;//返回
}
for (int i = 0; i <maxSize ; i++) {
arr[n]=i; //第一次当n=0时 i=0 第二次n=1,i=0;n=1 i=1 arr[n]=1 n=1 i=2 ;
if(check(n)){ //进行判断是否有冲突 第二次冲突 i++ 再次i++; 当i=2是没有冲突
show(n+1); //第一次没有 放入第二个棋子,放入第三个棋子
}
}
}
//判断是否有冲突 n代表第n个皇后
public Boolean check(int n) {
for (int i = 0; i < n; i++) {//检测第n个皇后的前几个是否冲突
//判断时候在同一列 arr[i]==arr[n] 或者一条斜线上Math.abs(n-i)==Math.abs(arr[n]-arr[i])
if (arr[i] == arr[n] || Math.abs(n - i) == Math.abs(arr[n] - arr[i])) {
// 当n=1时 i=0 arr[i]=0 arr[n]=0 在同一列
// i++后 当n=1 i=0 arr[i]=0,arr[n]=1 再通一条斜线
return false;//如果冲突返回false;
}
}
return true;
}
//输出数据
public void print() {
//i代表第几行 arr[i]代表第几列
for (int i = 0; i < maxSize; i++) {
System.out.print(arr[i] +" ");
}
System.out.println();
}
}