問題:八皇后
要求:解的輸出用八個數字表示,如:基本解,1代表第一行第一列有皇后,5代表第二行第五列有皇后,以此類推....
解答:
#includeint count=0;
int notdanger(int row,int j,int (*chess)[8])
} //判斷左上方
for(i=row,k=j;i>=0&&k>=0;i--,k--) }
//判斷右下方
for(i=row,k=j;i<8&&k<8;i++,k++) }
//判斷右上方
for(i=row,k=j;i>=0&&k<8;i--,k++) }
//判斷左下方
for(i=row,k=j;i<8&&k>=0;i++,k--) }
if(flag1||flag2||flag3||flag4||flag5)
return 0;
else
return 1;
}//引數row表示起始行
//引數n:表示列數
//引數(*chess)[8]表示指向棋盤每一行的指標
void eightqueen(int row,int n,int(*chess)[8])
} if(8==row&&chess2[0][0]==1)
if(chess2[i][j]!=0&&i==7)
printf("%d",j+1);
}//printf("\n");
} printf("\n\n");
count++;
} else
{ //判斷這個位置是否有危險
//如果沒有危險?繼續往下
for(j=0;j
思考:上面**的思路是以行為標準,一行一行去填充,只有在某一行確定之後,下一行才能確定。在某乙個點,實際上只需要考慮左上方,列方向,右上方,不需要考慮左右下方,因為在填充某乙個點的時候,你只知道上面的行是填充了,下面的行還沒有填充。上面的**有些冗餘。程式最難理解的還是遞迴回溯的過程,當滿足一行的時候,再遞迴去計算下一行,直到第8行列印符合的解,某乙個符合的解列印完之後,再尋找第8行有沒有其它的解,如果沒有,退回到第7行,再從第7行開始選擇填充的位置。 演算法程式設計 JAVA 八皇后問題
題目 在乙個8 8西洋棋盤上,有8個皇后,每個皇后佔一格 要求皇后間不會出現相互 攻擊 的現象,即不能有兩個皇后處在同一行 同一列或同一對角線上。問共有多少種不同的方法?解題思路 通過乙個int 8 8 的二位陣列構建棋盤,初始化為0,我們可以定義如果該位置擺放了皇后那麼該位置對應的二維陣列被置為 ...
八皇后問題
八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...
八皇后問題
include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...