haju__log

[python][백준/BOJ] 1260번 : DFS와 BFS 본문

BOJ_백준/DFS_BFS

[python][백준/BOJ] 1260번 : DFS와 BFS

haju 2023. 9. 17. 01:37
반응형

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

import sys

#dfs 함수
def dfs(v):
    #v를 방문처리해서 True로 저장한다.
    visited[v]=True
    #방문처리한 노드는 출력
    print(v,end=' ')
    #반복문을 돌면서 1번 노드와 인접한 노드들이 있는지 확인한다.
    for i in range(1,n+1):
        #만약 인접한 노드가 있고, 아직 방문하지 않았다면 (false는 방문처리 아직 안됨)
        if graph[v][i]==True and visited[i]==False:
            dfs(i) #dfs를 수행한다.

#bfs 함수
def bfs(v):
    queue=[v]
    visited[v]=True #방문처리
    while queue:
        v=queue.pop(0) #해당방문한 노드를 제거하고 출력
        print(v,end=' ')
        #반복문을 돌면서 인접한 노드가있고, 아직 방문하지 않았다면
        for i in range(1,n+1):
            if graph[v][i]==True and visited[i]==False:
                queue.append(i) #queue에 원소들을 전부 삽입하고
                visited[i]=True #방문처리해준다.

n,m,v=map(int,sys.stdin.readline().split())

#그래프 행렬만들기 (False로 초기화)
graph=[[False] *(n+1) for _ in range(n+1)]
for i in range(m):
    #노드들을 입력받아 해당 노드들만 True로 바꿔줌
    a,b=map(int,sys.stdin.readline().split())
    graph[a][b]=True
    graph[b][a]=True

visited=[False]*(n+1)
dfs(v)
visited=[False]*(n+1)
print()
#dfs를 수행하면서 visited가 바뀌었을 것이므로 visited를 다시 초기화
bfs(v)

 

✅ 참고한 블로그

https://velog.io/@falling_star3/%EB%B0%B1%EC%A4%80Python-1260%EB%B2%88-DFS%EC%99%80BFS

 

[백준][Python] 1260번 DFS와 BFS(DFS/BFS 기본 구현 자세히)

https://www.acmicpc.net/problem/1000두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.입력첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)출력첫째 줄에 A+B를 출력한다.입출력 예

velog.io

 

반응형