1. 程式人生 > >北大ACM1010-深度優先搜尋(DFS)初探

北大ACM1010-深度優先搜尋(DFS)初探

public static void Dfs2(int deep , int[][] input , int[] candidates){
if(deep == 8){
for(int i=0;i<8;i++){
for(int j=0;j<8;j++){
System.out.print(input[i][j]);
}
System.out.print("\n");
}
System.out.print("\n");
}else{
for(int i=0;i<8;i++){
if(candidates[i]==1 || IsCollision(input,deep,i)){
continue;
}else{
input[deep][i] = 1;
candidates[i] = 1;//用於剪枝,每當有一個位置被選中,整列都不能再被選擇
Dfs2(deep+1,input,candidates);
input[deep][i] = 0;
candidates[i] = 0;
}
}
}
}

public static boolean IsCollision(int[][] input,int x,int y){
int i,j;
for(i=0;i<x ;i++){//沒有橫著的
if(input[i][y] == 1){
return true;
}
}
for(j=0;j<y;j++){//沒有豎著的
if(input[x][j] == 1){
return true;
}
}
if(x == y){//沒有左對角線的
return true;
}
if(x + y == 7){//沒有右對角線的
return true;
}
return false;
}