递归求N皇后问题
?
#include <stdio.h>#include <string.h>char pos[300]; /* pos[i] = j表示第i行上的皇后放在第j列 */int n;int count;/* 寻找第i行的皇后可以放的位置,不能放则令pos[row]等于-1 */void find (int row){inti, j, k;charok;if (row == n) {printf("第%d种解决方案: ", ++count);for (k = 0; k < n; k++) {printf("%d ", pos[k]);}printf("\n");return;}/* 试探所有列 */for (i = 0; i < n; i++) {ok = 1;/* 先假设第i列可以放 */for (j = 0; j < row; j++) {/* 一旦检查到与放好的皇后攻击,则不让放 */if (pos[j] == i || abs(pos[j]-i) == abs(j-row)) {ok = 0;break;}}if (ok) {pos[row] = i;find(row+1);}}}int main(){inti, j;while (scanf("%d", &n), n) {count = 0;find(0);}}