boardcover2 왜 예제도 제때 못계산하는걸까요.. skan1543 void check(int count) { int x, y = -1; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { if (board[i][j] == '.') { x = i; y = j; break; } } if (y != -1) break; } if (y == -1) { if (best < count) best = count; return; } int cnt = 0; for (int i = 0; i < H; i++) for (int j = 0; j <W; j++) if (board[i][j] != '#') cnt++; if ((cnt / cb)+count <= best) return; int imsi = blocks.size(); for (int l = 0; l <imsi; l++) { int i; int tt = blocks[l].size(); for (i = 0; i < tt; i++) if (board[x + blocks[l][i].first][y + blocks[l][i].second] == '#' || x + blocks[l][i].first<0 || x + blocks[l][i].first>=H || y + blocks[l][i].second<0 || y + blocks[l][i].second>=W) break; if (i == tt) { for (i = 0; i <tt; i++) board[x + blocks[l][i].first][y + blocks[l][i].second] = '#'; check(count+1); for (i = 0; i < tt; i++) board[x + blocks[l][i].first][y + blocks[l][i].second] = '.'; } } board[x][y] = '@'; check(count); board[x][y] = '.'; } BOARDCOVER2 제 생각대로 했는데, 예제도 나오지 않아.. 책에있는 솔루션을 그대로 써서 작성했는데도 두번째 예제가 엄청 오래걸리네요.. 다른 코드는 불필요 할것같아 탐색을 수행하는 함수부분만 올립니다. vector< vector< pair > > blocks에.. 책에있는것처럼 퍼즐블록의 제일 상단왼쪽의 #을 기준으로, # 들의 상대좌표들을 저장하였고. char board[][]에 보드판의 정보가 들어있습니다. 현재 보드판에 제일 상단 왼쪽의 빈공간을 찾아준뒤 그 공간을 기준으로 둘수있는 방향을 체크하면서, 가능하다면 두어보면서 탐색하고 마지막에 칸을 비우고 한번 더 탐색하는것까지.. 책에있는것이랑 비슷하게 구현하였는데 왜 예제도 안나오는것일까요? 8년 전
1개의 댓글이 있습니다. skan1543 해결하였습니다.. 가지치기를 똑띠 해주니 되네요 ㅠㅠ 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
skan1543
BOARDCOVER2
제 생각대로 했는데, 예제도 나오지 않아..
책에있는 솔루션을 그대로 써서 작성했는데도
두번째 예제가 엄청 오래걸리네요..
다른 코드는 불필요 할것같아
탐색을 수행하는 함수부분만 올립니다.
vector< vector< pair > > blocks에.. 책에있는것처럼 퍼즐블록의 제일 상단왼쪽의 #을 기준으로, # 들의 상대좌표들을 저장하였고. char board[][]에 보드판의 정보가 들어있습니다.
현재 보드판에 제일 상단 왼쪽의 빈공간을 찾아준뒤 그 공간을 기준으로 둘수있는 방향을 체크하면서, 가능하다면 두어보면서 탐색하고
마지막에 칸을 비우고 한번 더 탐색하는것까지..
책에있는것이랑 비슷하게 구현하였는데 왜 예제도 안나오는것일까요?
8년 전