八皇后 遞迴

2021-07-26 20:47:21 字數 1085 閱讀 4798

#include "iostream"

using

namespace

std;

int number = 0;

int isleague(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)

else

}/*引數row: 行

引數cols: 列

引數int (*(chess)[8]): 指向棋盤行的指標

*/void eight_queens(int row, int cols, int (*chess)[8])

}if (8 == row)

printf("\n");

}printf("\n");

number++;

}else

*(*(chess2 + row) + j) = 1;

eight_queens(row + 1, cols, chess2); // 遞迴}}

}}void main()

}eight_queens(0, 8, chess);

system("pause");

}

1的位置是皇后應該在的位置,共有92種方法,因為控制台快取的問題,不能列印全部,大家可以通過 debug 的方法逐一檢視。

八皇后問題 遞迴

問題描述 在乙個8 8西洋棋盤上,有8個皇后,每個皇后佔一格 要求皇后間不會出現相互 攻擊 的現象,即不能有兩個皇后處在同一行 同一列或同一對角線上。問共有多少種不同的方法。程式 public void testeightprince 初始化,所有的位置都可以放置乙個皇后 for int x 0 x...

Codeup遞迴 八皇后

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2.b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...

經典 八皇后 遞迴

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法.由於使用迴圈會存在多層,比較繁雜,這裡使用遞迴dfs 深度優先搜尋...