[백준] 1260번 bfs와 dfs (python, java)
728x90
반응형
1. python
import collections
import sys
sys.setrecursionlimit(2000)
def dfs(x):
visited[x]=True
print(x,end=' ')
for y in sorted(dict[x]):
if not visited[y]:
dfs(y)
def bfs(x):
visited[x]=True
dq=collections.deque()
dq.append(x)
while dq:
cur=dq.popleft()
print(cur,end=' ')
for y in sorted(dict[cur]):
if not visited[y]:
visited[y]=True
dq.append(y)
n,m,v=map(int,sys.stdin.readline().split())
dict=collections.defaultdict(list)
for i in range(m):
a,b=map(int,sys.stdin.readline().split())
dict[a].append(b)
dict[b].append(a)
visited=[False]*(n+1)
dfs(v)
visited=[False]*(n+1)
print()
bfs(v)
2. java
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class B_1260_Main {
static int n,m,v;
static LinkedList<Integer>[] list;
static boolean[] vis;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
v=sc.nextInt();
vis=new boolean[n+1];
list=new LinkedList[n+1];
for (int i = 0; i < n+1; i++) {
list[i]=new LinkedList<>();
}
for (int i = 0; i < m; i++) {
int a=sc.nextInt();
int b=sc.nextInt();
list[a].add(b);
list[b].add(a);
}
dfs(v);
System.out.println();
bfs();
}
private static void bfs() {
Queue<Integer> q=new LinkedList<>();
vis=new boolean[n+1];
q.add(v);
vis[v]=true;
while(q.size()!=0) {
int cur=q.poll();
System.out.print(cur+" ");
list[cur].sort((a,b)->a-b);
for (int i = 0; i < list[cur].size(); i++) {
int next=list[cur].get(i);
if(vis[next])continue;
vis[next]=true;
q.add(next);
}
}
System.out.println();
}
private static void dfs(int cur) {
vis[cur]=true;
System.out.print(cur+" ");
list[cur].sort((a,b)->a-b);
for (int i = 0; i < list[cur].size(); i++) {
int next=list[cur].get(i);
if(vis[next])continue;
dfs(next);
}
}
}
728x90
반응형
'백준' 카테고리의 다른 글
[백준] 2252번 줄세우기( 파이썬, 위상정렬) (0) | 2020.10.10 |
---|---|
백준 10282번 해킹(파이썬) (0) | 2020.10.08 |
백준 1753번 다익스트라 (파이썬) (0) | 2020.10.08 |
백준 중앙값 구하기 (우선순위큐, python) (0) | 2020.10.03 |
가운데를 말해요 (python, 우선순위큐) (0) | 2020.10.03 |
TAGS.