2개의 큐로 bfs하는 건 됐는데
한개로 큐를 바꾸고 상태를 같이하려니 .. 문제가 많네요
어디가 문제일까요
테스트 코드는 통과하는데..
from collections import deque
def bfs():
global result
global is_out
while queue:
nx, ny, target, count = queue.popleft()
for dy, dx in direction:
tx, ty = nx + dx, ny + dy
if ty >= y or ty < 0 or tx >= x or tx < 0:
continue
if target == "fire":
if table[ty][tx] != "#" and table[ty][tx] != "*":
table[ty][tx] = "*"
queue.append((tx, ty, "fire", 0))
if target == "person":
if table[ty][tx] == ".":
if tx == x - 1 or tx == 0 or ty == y - 1 or ty == 0:
is_out = True
result = count + 1
return
table[ty][tx] = "@"
queue.append((tx, ty, "person", count + 1))
num = int(input())
direction = [[1, 0], [0, 1], [-1, 0], [0, -1]]
for _ in range(num):
x, y = map(int, input().split())
now_location_x = 0
now_location_y = 0
queue = deque()
table = []
result = 1
is_out = False
for iy in range(y):
row = list(input().strip())
table.append(row)
for ix in range(x):
if row[ix] == "@":
now_location_x = ix
now_location_y = iy
table[iy][ix] = 1
if row[ix] == "*":
queue.append((ix, iy, "fire", 0))
queue.append((now_location_x, now_location_y, "person", 1))
bfs()
if is_out:
print(result)
else:
print("IMPOSSIBLE")
이거 사람이 불피해서 달아나는 문제라면, 큐 하나만 써서 문제인거 아님? 걍 큐를 2개 써
사람큐, 불 큐 따로 처리하고, 사람 이동 -> 불 처리 따로 하면 되는거 아닌가? 왜 꼭 같이 해야함? 내가 잘 몰라서 그럼
하나의 큐로 할꺼면 사람, 상태 불의 상태 따로 저장해야하는데 더 어렵지 않나?
보니까 걍 조건 문제 아닐까? 가령 불이 먼저 이동->그다음 사람이 이동 이래야하는데, 사람 이동->불 이동 이렇게 되잖아. 아니면 그 반대거나. 결국 조건에 따라서 먼저 움직이는거 처리해야하는거 같은데?
어쩌피 1사이클씩 돌면되니깐 이방법으로 해보려고 했습니다. 불이 확장 불 상태 큐에 넣음 -> 사람 확인 불 확장된 큐 뒤에 사람 큐 넣음 어쩌피 선입선출이니깐..
흐으으으음...
시작이 가장자리 있을때도 추가는데 틀렸다고하네요..
사람 초기 위치를 table[iy][ix]=1 이 아니라, 아예 빈 공간으로 해보자 그러면
감사합니다 ! 가장자리 시작 문제였네요.. 가장자리에 있을때 코드를 여기서는 작성안하고 작성할때는 잘못 작성했었네요
도움됐다면 다행이다. 좋은 하루