1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <iostream> using namespace std;
char map[5][9]; int t, Min = 1e9, Cnt; int dx[4] = { -1,1,0,0 }; int dy[4] = { 0,0,-1,1 };
bool IsRange(int x, int y) { return (x >= 0 && y >= 0 && x < 5 && y < 9); }
void BackTracking(char map[5][9], int depth = 0) { int Cur = 0; for (int i = 0; i < 5; ++i) { for (int j = 0; j < 9; ++j) { if (map[i][j] == 'o') { Cur = Cur + 1; } } }
if (Cur < Min) { Min = Cur; Cnt = depth; }
for (int x = 0; x < 5; ++x) { for (int y = 0; y < 9; ++y) { if (map[x][y] == 'o') {
for (int d = 0; d < 4; ++d) { int nx = x + dx[d]; int ny = y + dy[d]; int jx = nx + dx[d]; int jy = ny + dy[d];
if (IsRange(nx, ny) && IsRange(jx, jy) && map[nx][ny] == 'o' && map[jx][jy] == '.') { map[x][y] = '.'; map[nx][ny] = '.'; map[jx][jy] = 'o'; BackTracking(map, depth + 1); map[x][y] = 'o'; map[nx][ny] = 'o'; map[jx][jy] = '.'; } } } } } }
int main() { ios_base::sync_with_stdio(false); cin >> t;
while (t--) { for (int i = 0; i < 5; ++i) { for (int j = 0; j < 9; ++j) { cin >> map[i][j]; } }
BackTracking(map);
cout << Min <<" "<< Cnt << "\n"; Min = 1e9; Cnt = 0; } }
|