八皇后問題
話說演算法筆記的code真的很漂亮...
#include <stdio.h>
int max, board[8][8], col_used[8], diag1_used[15], diag2_used[15];
void queen(int row, int sum)
{
int i, d1, d2;
if (row == 8 && sum > max) {
max = sum;
return;
}
for (i = 0; i < 8; ++i) {
d1 = row+i;
d2 = (row-i+15) % 15;
if (!col_used[i] && !diag1_used[d1] && !diag2_used[d2]) {
col_used[i] = diag1_used[d1] = diag2_used[d2] = 1;
queen(row+1, sum + board[row][i]);
col_used[i] = diag1_used[d1] = diag2_used[d2] = 0;
}
}
}
int main(void)
{
int k, i, j;
scanf("%d", &k);
while (k--) {
for (i = 0; i < 8; ++i)
for (j = 0; j < 8; ++j)
scanf("%d", &board[i][j]);
for (i = 0; i < 8; ++i)
col_used[i] = 0;
for (i = 0; i < 15; ++i)
diag1_used[i] = diag2_used[i] = 0;
max = 0;
queen(0, 0);
printf("%5d\n", max);
}
return 0;
}
沒有留言:
張貼留言