From 86db277e9d934e4723c0cc9bb910bc6e442dae84 Mon Sep 17 00:00:00 2001 From: Yu-jiwon Date: Sat, 16 Sep 2023 22:41:00 +0900 Subject: [PATCH] =?UTF-8?q?BFS/DFS=20:=20[#298][#299][#300][#301][#302][#3?= =?UTF-8?q?04]=20=EC=9C=A0=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...75\353\241\234\354\260\276\352\270\260.py" | 34 +++++++++++++++ ...0\353\260\224\352\274\255\354\247\2102.py" | 34 +++++++++++++++ ...0\353\260\224\352\274\255\354\247\2103.py" | 27 ++++++++++++ ...44\353\246\254\352\262\214\354\236\204.py" | 41 ++++++++++++++++++ ...74\355\224\274\355\225\230\352\270\260.py" | 42 +++++++++++++++++++ ...7_\354\225\214\355\214\214\353\262\263.py" | 35 ++++++++++++++++ ...20\352\263\240\353\245\264\352\270\260.py" | 10 +++++ ...\244\200_3055_\355\203\210\354\266\234.py" | 33 +++++++++++++++ 8 files changed, 256 insertions(+) create mode 100644 "graph_traversal/\353\260\261\354\244\200_11403_\352\262\275\353\241\234\354\260\276\352\270\260.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_12851_\354\210\250\353\260\224\352\274\255\354\247\2102.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_13549_\354\210\250\353\260\224\352\274\255\354\247\2103.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_16928_\353\261\200\352\263\274\354\202\254\353\213\244\353\246\254\352\262\214\354\236\204.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_1743_\354\235\214\354\213\235\353\254\274\355\224\274\355\225\230\352\270\260.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_1987_\354\225\214\355\214\214\353\262\263.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_2668_\354\210\253\354\236\220\352\263\240\353\245\264\352\270\260.py" create mode 100644 "graph_traversal/\353\260\261\354\244\200_3055_\355\203\210\354\266\234.py" diff --git "a/graph_traversal/\353\260\261\354\244\200_11403_\352\262\275\353\241\234\354\260\276\352\270\260.py" "b/graph_traversal/\353\260\261\354\244\200_11403_\352\262\275\353\241\234\354\260\276\352\270\260.py" new file mode 100644 index 0000000..3dfb904 --- /dev/null +++ "b/graph_traversal/\353\260\261\354\244\200_11403_\352\262\275\353\241\234\354\260\276\352\270\260.py" @@ -0,0 +1,34 @@ +#간선추가할 때, 양쪽에서 이어지는 것인 줄 알았는데 +#하나만 추가하면 됐었다. +from collections import deque +n = int(input()) +num=[[] for _ in range(n)] + +for i in range(n): + x=list(map(int,input().split())) + for j in range(n): + if x[j]==1: + num[i].append(j) + +def bfs(a): + visit=[0]*n + q=deque() + q.append(a) + while q: + x=q.popleft() + for nx in num[x]: + if visit[nx]==0: + visit[nx]=1 + q.append(nx) + return visit + +for i in range(n): + result=bfs(i) + for j in range(n): + print(result[j],end=' ') + print() + +#메모리 : 34140 kb +#시간 : 80 ms +#코드길이 : 597 b +#풀이시간 : 30분(대충) \ No newline at end of file diff --git "a/graph_traversal/\353\260\261\354\244\200_12851_\354\210\250\353\260\224\352\274\255\354\247\2102.py" "b/graph_traversal/\353\260\261\354\244\200_12851_\354\210\250\353\260\224\352\274\255\354\247\2102.py" new file mode 100644 index 0000000..e4c6fce --- /dev/null +++ "b/graph_traversal/\353\260\261\354\244\200_12851_\354\210\250\353\260\224\352\274\255\354\247\2102.py" @@ -0,0 +1,34 @@ +# 다시풀기 +from collections import deque +n,k=map(int,input().split()) +gragh=[0]*100001 +visit=[0]*100001 + +cnt=0 +res=0 +q=deque() + +def bfs(a): + global res,cnt + q.append(a) + while q: + x=q.popleft() + temp=gragh[x] + if x==k: + cnt+=1 + res=temp + continue + for nx in [x-1,x+1,2*x]: + if 0<=nx<100001 and (gragh[nx]==0 or gragh[nx]==gragh[x]+1): + gragh[nx]=gragh[x]+1 + q.append(nx) + return res,cnt + +x,y=bfs(n) +print(x) +print(y) + +#메모리 : 38468 kb +#시간 : 380 ms +#코드길이 : 547 b +#풀이시간 : 53분 \ No newline at end of file diff --git "a/graph_traversal/\353\260\261\354\244\200_13549_\354\210\250\353\260\224\352\274\255\354\247\2103.py" "b/graph_traversal/\353\260\261\354\244\200_13549_\354\210\250\353\260\224\352\274\255\354\247\2103.py" new file mode 100644 index 0000000..6455752 --- /dev/null +++ "b/graph_traversal/\353\260\261\354\244\200_13549_\354\210\250\353\260\224\352\274\255\354\247\2103.py" @@ -0,0 +1,27 @@ +# gragh초기화 값을 0에서 -1로만 바꾸어주니까 바로 성공했다.. 왜지? +from collections import deque +n,k = map(int,input().split()) +gragh=[-1]*100001 +gragh[n]=0 +q=deque() +q.append(n) +cnt=0 + +while q: + x=q.popleft() + if x==k: + print(gragh[x]) + break + for nx in [x-1,x+1,x*2]: + if 0<=nx<100001 and gragh[nx]==-1: + if nx==x*2: + gragh[nx]=gragh[x] + q.appendleft(nx) + else: + gragh[nx]=gragh[x]+1 + q.append(nx) + +#메모리 : 35364 kb +#시간 : 132 ms +#코드길이 : 444 b +#풀이시간 : 34분 \ No newline at end of file diff --git "a/graph_traversal/\353\260\261\354\244\200_16928_\353\261\200\352\263\274\354\202\254\353\213\244\353\246\254\352\262\214\354\236\204.py" "b/graph_traversal/\353\260\261\354\244\200_16928_\353\261\200\352\263\274\354\202\254\353\213\244\353\246\254\352\262\214\354\236\204.py" new file mode 100644 index 0000000..249ab0d --- /dev/null +++ "b/graph_traversal/\353\260\261\354\244\200_16928_\353\261\200\352\263\274\354\202\254\353\213\244\353\246\254\352\262\214\354\236\204.py" @@ -0,0 +1,41 @@ +from collections import deque +n,m = map(int,input().split()) +sa={} +snake={} +for i in range(n): + x,y = map(int,input().split()) + sa[x]=y +for i in range(m): + u,v=map(int,input().split()) + snake[u]=v + +gragh=[0]*101 + +visit=[0]*101 + +def bfs(a): + q=deque() + q.append(a) + while q: + x=q.popleft() + if x==100: + return gragh[100] + for i in range(1,7): + nx=x+i + if 03,3->1, 5->5 이런식으로 사이클이 생겨야 하는 건 알겠다. +# 이걸 어떻게 구현해야 하는지는 모르겠다. + +n = int(input()) +num={} +for i in range(1,n+1): + num[i]=int(input()) + +# dfs로 풀기 +# 정점들을 돌면서 연결이 되는지 파악,, diff --git "a/graph_traversal/\353\260\261\354\244\200_3055_\355\203\210\354\266\234.py" "b/graph_traversal/\353\260\261\354\244\200_3055_\355\203\210\354\266\234.py" new file mode 100644 index 0000000..1a4fab2 --- /dev/null +++ "b/graph_traversal/\353\260\261\354\244\200_3055_\355\203\210\354\266\234.py" @@ -0,0 +1,33 @@ +# 다시 풀기..(이해는 되지만 구현을 못하겠다) +from collections import deque + +r,c = map(int,input().split()) +gragh=[] +for i in range(r): + gragh.append(list(input())) + +dx=[0,0,-1,1] +dy=[1,-1,0,0] + +visit=[[0]*c for _ in range(r)] + +q=deque() + +def bfs(a,b): + q.append((a,b)) + while q: + x,y=q.popleft() + + for i in range(4): + nx=x+dx[i] + ny=y+dy[i] + if 0<=nx