1. 일단 BFS로 안뚫어도 도달은 하는지, 아니면 안뚫으면 못가는지를 확인하고, 그때까지의 방문한 위치 visited 리스트를 반환합니다.
2. 안 뚫으면 못가는 경우
갔던 모든길을 대상으로 1. 상하좌우중 벽이 있고 2. 그 벽 너머의 3방향중 길이 있으며, 갔던 길이 아닌 경우가 있으면 3. 그 벽을 뚫은 새로운 maze를 생성한다.
3. 안뚫어도 성공한 경우
갔던 모든 길을 대상으로 1. 상하좌우중 벽이 있고 2. 그 벽 너머의 3방향중 길이 있고, 갔던 길이라면 +) 둘러쌓여서 간적없는 곳이라면 하나만 뚫어서는 소용이 없기때문. 3. 현재의 길과 너머의 길의 숫자차이를 기록하고, (가장 큰 값 - 2) 만큼 원래 답에서 뺀다.
안뚫어도 성공한 경우의 2번 논리에서 무언가 문제가 있을 것 같은 느낌인데, 구체적으로 파악이 안됩니다...
ckdgnsl1002 2년 전
푸는 방법은 주석에 나와있는대로 입니다.
1. 일단 BFS로 안뚫어도 도달은 하는지, 아니면 안뚫으면 못가는지를 확인하고, 그때까지의 방문한 위치 visited 리스트를 반환합니다.
2. 안 뚫으면 못가는 경우
갔던 모든길을 대상으로 1. 상하좌우중 벽이 있고 2. 그 벽 너머의 3방향중 길이 있으며, 갔던 길이 아닌 경우가 있으면 3. 그 벽을 뚫은 새로운 maze를 생성한다.
3. 안뚫어도 성공한 경우
갔던 모든 길을 대상으로 1. 상하좌우중 벽이 있고 2. 그 벽 너머의 3방향중 길이 있고, 갔던 길이라면 +) 둘러쌓여서 간적없는 곳이라면 하나만 뚫어서는 소용이 없기때문. 3. 현재의 길과 너머의 길의 숫자차이를 기록하고, (가장 큰 값 - 2) 만큼 원래 답에서 뺀다.
안뚫어도 성공한 경우의 2번 논리에서 무언가 문제가 있을 것 같은 느낌인데, 구체적으로 파악이 안됩니다...
반례들은 이곳저곳에서 찾아서 해봤는데 다 되었습니다.