九宫格
/*
规则
1.把1放到第一行的中间
2.开始向右上角放入后面的数字,如果右上是空的直接填 如果右上已经填过了 直接填在当前位置的下面
*/
public static int n=5;
public static int[][] array=new int[n][n];
//逻辑
public static void squaredUp(int[][] array){
int x=1;//要填入的数据
//定义起始位置
int row=0;
int col=n/2;
array[row][col]=1;
//开始填写后面的数据
while(x<n*n){
//在选择下一位置的时候,先记录下现在的位置
int tempRow=row;
int tempCol=col;
//向右上移动
row--;
if(row<0){
row=n-1;
}
col++;
if(col==n){
col=0;
}
x++;
if(array[row][col]==0){//如果右上没填,直接填入
array[row][col]=x;
}else{//如果没填,就放到当前位置的下面
//还原
row=tempRow;
col=tempCol;
row++;
array[row][col]=x;
}
}
}
八皇后问题
//下标表示行号 值表示列号
public static int[] array=new int[8];
/**
* 处理八个皇后的问题
*/
public static void eightQueens(){
eightQueens(0);
}
public static void eightQueens(int row){
//如果有结果了就退出
if(row==8){
printResult();
System.out.println("---------");
return;
}
//开始从第一列到最后一列一个个放入
for(int col=0;col<8;col++){
array[row]=col;
if(judge(row)){//判断是否可以放入
eightQueens(row+1);//就开始下一行
}
}
}
/**
* 判断当前列放入的位置是否和以前放过的内容有冲突
*/
public static boolean judge(int n){//n=4
for(int i=0;i<n;i++){
//条件1 array[i]==array[n] 在一列上
//条件2 abs(n-i)==abs(array[n]-array[i])
if(array[i]==array[n] || Math.abs(n-i)==Math.abs(array[n]-array[i])){
return false;
}
}
return true;
}
public static void printResult(){
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
}