우리는 보통 두 가지의 방법으로 그래프를 표현한다.
우리는 위의 두 가지의 방법을 아주 간단하게 정리하고 코드로 구현을 해볼 것이다.
v = 5
edges = [(0,1,1),(0,4,1),(1,2,1),(1,3,1),(2,3,1),(3,4,1)]
# n * n의 0 배열 생성
def zeroMatrix(v):
return [[0] * v for _ in range(v)]
def initMatrix(graph,edges):
for s,e,val in edges:
graph[s][e] = val
graph[e][s] = val
def printMatrix(graph):
for row in graph:
print(" ".join(map(str,row)))
graph = zeroMatrix(v)
initMatrix(graph,edges)
printMatrix(graph)
장점
단점
한개의 노드를 기준으로 해당 노드와 연결된 노드를 리스트로 표현한 것이다. 즉, 각 정점이 ‘연결 리스트’를 가지고 인접한 정점들을 연결 리스트로 표현한 것
각 정점에 대한 인접 정점들을 순차적으로 연결 리스트로 표현하는 방법
하나의 정점에 대한 인접 정점들을 각각 노드로 하는 연결 리스트로 저장하며 인접 행렬과는 다르게 존재하지 않는 간선은 표현상 나타나지 않음
가중치가 있는 그래프일 경우
v = 5
# 가중치 그래프
edges = [(0,1,1),(0,4,1),(1,2,1),(1,3,1),(2,3,1),(3,4,1)]
# dictionary 구조를 사용한다.
def zeroList(v):
return {i : [] for i in range(v)}
def initList(graph,edges):
for s,e,val in edges:
graph[s].append((e,val))
graph[e].append((s,val))
def printlist(graph):
for v in graph:# v는 key 값
print(f"{v} : {graph[v]}")
graph = zeroList(v)
initList(graph,edges)
printlist(graph)