// UVa 167 - The Sultan's Successors #include <iostream> #include <string.h> #include <stdio.h> using namespace std; bool free_row[8]; int pos_col[8]; int sol, sum; int chess[8][8]; void rec(int col) { if (col == 8) { if (sum > sol) sol = sum; return; } for (int row = 0; row < 8; row++) if (free_row[row]) { int a_up = row; int a_down = row; bool invalid = false; for (int i = col - 1; i >= 0; i--) { a_up++; a_down--; if ((a_down >= 0 && pos_col[i] == a_down) || (a_up < 8 && pos_col[i] == a_up)) { invalid = true; break; } } if (!invalid) { pos_col[col] = row; free_row[row] = false; sum += chess[row][col]; rec(col + 1); pos_col[col] = -1; free_row[row] = true; sum -= chess[row][col]; } } } int main() { int t; for (cin >> t; t; t--) { for (int i = 0; i < 8; i++) for (int j = 0; j < 8; j++) cin >> chess[i][j]; memset(pos_col, 255, sizeof(pos_col)); memset(free_row, true, sizeof(free_row)); sol = 0; sum = 0; rec(0); printf("%5d\n", sol); } return 0; }
Monday, May 4, 2015
UVa 167 - The Sultan's Successors
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment