問題描述:
和為15的棋盤遊戲要求從1到9的九個數填入3*3的棋盤的方格子中,使得各列、各行以及兩條對角線上的三個數之和均為15.
/**
* 遞歸九層,每層在棋盤的一個格子上放置一個數。
* 用一維數組表示棋盤。
* @author CQcoming
*
*/
/**
* isUsed[i] == 0 表示i+1暫時沒有填入棋盤中
* @author CQcoming
*
*/
public class MyTest{
int isUsed[],
qi[],//存儲棋盤對應位置存儲的數字
count;//用于統計結果數
MyTest(){
isUsed = new int[9];
for(int e:isUsed) e = 0;
qi = new int[9];
for(int e:qi) e = 0;
}
boolean equals15(int num){
if(num == 15)
return true;
else
return false;
}
void dd(int num){ //num記錄遞歸層數
boolean flag = true; //進入第九層時,for循環還會進行九次。確定正确結果隻輸出一次。
for(int i=0;i<9;i++){
if(num != 9){
if(isUsed[i] == 0){
qi[num] = i+1;
isUsed[i] = 1;
}
else
continue;
dd(num+1);
isUsed[i] = 0; //把資料歸位
}
else{
if(flag){
int sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8;
sum1 = qi[0] +qi[1]+qi[2];
sum2 = qi[3] +qi[4]+qi[5];
sum3 = qi[6] +qi[7]+qi[8];//各行
sum4 = qi[0] +qi[3]+qi[6];
sum5 = qi[1] +qi[4]+qi[7];
sum6 = qi[2] +qi[5]+qi[8];//各列
sum7 = qi[0] +qi[4]+qi[8];
sum8 = qi[2] +qi[4]+qi[6];//對角線
if(equals15(sum1) && equals15(sum2) &&equals15(sum3) &&equals15(sum4) &&
equals15(sum5) &&equals15(sum6) &&equals15(sum7) &&equals15(sum8)){
for(int k =0;k<9;k++){
System.out.print(qi[k]+" ");
}
count++;
System.out.println("");
}
}
flag = false;
}
}
}
void printCount(){
System.out.println(count);
}
public static void main(String[] args) {
MyTest a =new MyTest();
a.dd(0);
a.printCount();
}
}