2013年2月13日 星期三

ACM 167 The Sultan's Successors

八皇后問題
話說演算法筆記的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;
}

沒有留言:

張貼留言