两个皇后不能放在同一列、同一行以及同一斜线上。
代码paraSolution[i]表示第i个皇后放的列数,t表示行数
#include运行结果#include #include #include //判断是否能放 bool place(int* paraSolution,int t) { int j; for(j = 1;j < t;j ++) { //斜线冲突和列冲突 if ((abs(t - j) == abs(paraSolution[j] - paraSolution[t])) || (paraSolution[j] == paraSolution[t])) return false; } return true; } //放置皇后(回溯) void backtracking(int* paraSolution, int n, int t) { int i; if(t > n) { for(i = 1;i <= n;i ++) { printf("%d ",paraSolution[i]); } printf("n"); } else { for(i = 1;i <= n;i ++) { paraSolution[t] = i; if(place(paraSolution,t)) backtracking(paraSolution, n, t + 1); } } } void nQueen(int n) { int i; int* solution = (int*)malloc((n + 1) * sizeof(int)); for(i = 0;i <= n;i ++) { solution[i] = 0; } backtracking(solution, n, 1); } int main() { nQueen(5); return 1; }
1 3 5 2 4 1 4 2 5 3 2 4 1 3 5 2 5 3 1 4 3 1 4 2 5 3 5 2 4 1 4 1 3 5 2 4 2 5 3 1 5 2 4 1 3 5 3 1 4 2



