|
|
back to boardWA #8 please, help me to find a bug, or give me some tests Here is my code. #include <iostream> #include <vector> #include <string> #include <math.h> #include <algorithm> #include <string.h> #include <stdio.h> #define MAX_VAL 100 using namespace std; int res = -1; vector<int> mem; void go(bool a[4][4],int cur) { long hex = 0,step = 1; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (a[i][j]==1) hex+=step; step*=2; } } if (hex==65535) { if (cur<res||res==-1) res = cur; return; } if (cur<mem[hex]) { mem[hex] = cur; int mov[4][2]; mov[0][0] = 1; mov[0][1] = 0; mov[1][0] = -1;mov[1][1] = 0; mov[2][0] = 0; mov[2][1] = 1; mov[3][0] = 0; mov[3][1] = -1; for (int x = 0; x < 4; x++) { for (int y = 0; y < 4; y++) { bool next[4][4]; for (int w1 = 0; w1 < 4; w1++) for (int w2 = 0; w2 < 4; w2++) next[w1][w2] = a[w1][w2]; for (int k = 0; k < 4; k++) { int nx = x+mov[k][0],ny = y+mov[k][1]; if (nx>=0&&ny>=0&&nx<4&&ny<4) next[nx][ny] = 1-next[nx][ny];// flip } next[x][y] = 1-next[x][y]; go(next,cur+1); } } } } int main() { bool a[4][4],f = true; string s; for (int i = 0; i < 4; i++) { cin >> s; for (int j = 0; j < 4; j++) { if (s[j]=='w') a[i][j] = 0; else { a[i][j] = 1; f = false; } } } if (f) { cout << "0"; return 0; } for (long x = 0; x < 1<<16+1; x++) mem.push_back(MAX_VAL); go(a,0); if (res==-1) cout << "Impossible"; else cout << res; return 0; } |
|
|