Algorithm - DFS/BFS

choko's avatar
Jun 29, 2024
Algorithm - DFS/BFS
Contents
DFS + DP

dfs

visited=[0 for _ in range(n+1)] if visited[_next]==1: continue
visited = [-1]*(V+1) visited[1] = 0 # 리턴 값 없음. visited에 모든 노드까지의 거리 저장 def DFS(node, dist): for v, d in tree[node]: cal_dist = dist + d if visited[v] == -1: visited[v] = cal_dist DFS(v, cal_dist) return
 

전력망을 둘로 나누기

from collections import defaultdict def solution(n, wires): answer = 100 link=defaultdict(list) for a,b in wires: link[a].append(b) link[b].append(a) def calc(node, _from, link, visited): visited[node]=1 network=link[node] cnt=1 for _next in network: if _next==_from or visited[_next]==1: continue cnt+=calc(_next, node, link, visited) return cnt for _from, _to in wires: visited=[0 for _ in range(n+1)] from_total=calc(_from, _to, link, visited) to_total=n-from_total gap=from_total-to_total if gap<0: gap*=-1 answer=min(answer, gap) return answer
 

타겟 넘버

  • visited 사용 x(인덱스가 높은 순으로 depth가 깊어지기 때문에)
cnt=0 def dfs(numbers, target, idx, sum): global cnt if sum==target: cnt+=1 return if idx>=len(numbers): return if sum==target: cnt+=1 return dfs(numbers,target,idx+1,sum+numbers[idx]) dfs(numbers,target,idx+1,sum) def solution(numbers, target): global cnt numbers_sum=sum(numbers) target=numbers_sum-target if target<=0 or target%2 : return 0 dfs(numbers, target/2, 0, 0) return cnt
 

트리의 지름

# 참고 -> 트리의 지름 구하기 1. 노드를 하나 정하고, 그 노드에서 가장 멀리 떨어진 노드 A를 찾는다. 2. A에서 가장 멀리 떨어진 노드(B)를 또 찾는다. 3. 이때 A에서 B까지의 거리가 트리의 지름이다.
 
 

DFS + DP

내리막 길

import sys input = sys.stdin.readline m,n=list(map(int, input().split())) board=['' for i in range(m)] for i in range(m): board[i]=list(map(int,input().split())) cnt=0 dy,dx=[1,-1,0,0],[0,0,1,-1] def dfs(y,x,dp,height): if y==m-1 and x==n-1: return 1 if dp[y][x]!=-1: return dp[y][x] cnt=0 for i in range(4): ny,nx=y+dy[i],x+dx[i] if 0<=ny<m and 0<=nx<n and board[ny][nx]<height: cnt+=dfs(ny,nx,dp,board[ny][nx]) dp[y][x]=cnt return dp[y][x] dp=[[-1 for _ in range(n)] for _ in range(m)] dfs(0,0,dp,board[0][0]) print(dp[0][0])
 
 

bfs

 
 
 
Share article

Tom의 TIL 정리방