[백준 9207번] 페그 솔리테어
2018. 10. 13. 17:44ㆍ알고리즘/백준
반응형
소스코드
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 | #include <iostream> #define n 9 #define m 5 using namespace std; int dx[4] = { 0, 0, -1, 1 }, dy[4] = {-1,1,0,0}, Min, ret; char map[m+1][n+1]; void find(char curmap[m+1][n+1], int depth) { int cnt = 0; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (curmap[i][j] == 'o') ++cnt; } } if (Min > cnt) { Min = cnt; ret = depth; } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (curmap[i][j] == 'o') { for (int k = 0; k < 4; ++k) { int xx = i + dx[k], yy = j + dy[k]; int xxx = i + (2 * dx[k]), yyy = j + (2 * dy[k]); if (xx < 0 || xxx < 0 || xx >= m || xxx >= m || yy < 0 || yyy < 0 || yy >= n || yyy >= n) continue; if (curmap[xx][yy] == 'o' && curmap[xxx][yyy] == '.') { curmap[i][j] = '.'; curmap[xx][yy] = '.'; curmap[xxx][yyy] = 'o'; find(curmap, depth + 1); curmap[i][j] = 'o'; curmap[xx][yy] = 'o'; curmap[xxx][yyy] = '.'; } } } } } } int main() { int tc; cin >> tc; while (tc--) { Min = 987654321, ret = -1; for (int i = 0; i < m; ++i) for (int j = 0; j < n; ++j) cin >> map[i][j]; find(map, 0); cout << Min << " " << ret << '\n'; } return 0; } | cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 5567번] 결혼식 (0) | 2018.04.01 |
---|---|
[백준 1188번] 음식 평론가 (0) | 2018.02.22 |
[백준 10409번] 서버 (1) | 2018.01.12 |
[백준 2804번] 크로스워드 만들기 (0) | 2018.01.12 |
[백준 10709번] 기상캐스터 (0) | 2018.01.12 |