2606 DFS

chi·2023년 5월 23일

백준

목록 보기
6/20

for 중간에 리스트가 바뀌면?



remove 안 쓴 거
아니 당연히 1 2에서 반복되겠지
방문 문제에서는 visited=[0,0,1,,,,] 쓰는 게 답인 듯



이 위치에 return 하면 두번째 재귀에서 1 2에서 return돼서 3을 못 감


아니 맞는 것 같은데 왜

성공

recurse 위치 봐라

visit 안 했을 때만 recurse해야지 다 해버리면 1 2에서만 빙글빙글 돌잖아!!!!!!!!!!!!!!!!!!!

★ DFS(방문 문제)에서 가장 중요한 건 return의 위치, recurse의 위치, visited 사용

DFS(방문 문제)에서 가장 중요한 건 return의 위치, recurse의 위치, visited 사용

for 도중에 변수나 리스트 바꾸는 거


예상 외로 괜찮은데 그래도 안 바꾸는 게..

코드

com=int(input())
num=int(input())
li=[]
visited=[0]*com #com개수 쓰는 이유
for i in range(num):
    li.append(set(map(int,input().split())))

visited[0]=1
def recurse(start=1):
    
    for i in li: #리스트
        if start in i:
            extra=i-{start}
            extra=list(extra)
            extra=extra[0] #어차피 두 노드 사이니까 원소가 하나만 남을테니 가능한 거
            if visited[extra-1]==0: #visited 위치 항상 주의!!!!!!!
                visited[extra-1]=1
                recurse(extra)
    return            

recurse()
count=0
for i in visited:
    if i==1:
        count+=1
print(count-1)   #시작 노드는 제외

오늘의 교훈

DFS(방문 문제)에서 가장 중요한 건 return의 위치, recurse의 위치, visited 사용

0개의 댓글