[백준 문제] 13023번 ABCDE - 그래프 문제 (파이썬)
그래프에 대한 정리
- 그래프는 정점(Node, Vertex) 와 간선(Edge:정점간의 관계(선))) 으로 이루어짐
- 차수 : 정점과 연결되어 있는 간선의 개수
- 인접 행렬 : i->j 간선이 있을때를 1, 없을때를 0 으로한 행렬
- 인접 리스트 : 예로 [[1], [0, 2], [1, 3], [2, 4], [3]] 이런식으로 나타나며 정점의 순서로 무엇이랑 연결되어있는지 리스트 형태
- 간선 리스트 : 모든 간선을 나타내는 형식. 예로 [(0,1), (1,0), (1,2)]
import sys
# n : 노드 수, m : 간선 수
n,m = map(int,input().split())
edges = [] # 간선 리스트 만들기
# 인접 행렬(Adjacency-matrix)로 간선이 있을 때 True값을 내보냄.
a = [[False]*n for _ in range(n)]
# 인접 리스트 만들기
g = [[] for _ in range(n)]
for _ in range(m):
u, v = map(int,input().split())
# 간선 리스트인 edge에 [(0,1), (1,0), (1,2)] 형식으로 넣는다.
edges.append((u,v))
edges.append((v,u))
# 인접행렬에 체크를 한다. 방향이 없는 그래프기 때문에 y=x 대칭이여야함
a[u][v] = a[v][u] = True
# 인접 리스트 데이터 넣기
g[u].append(v)
g[v].append(u)
# 간선이 왼쪽 오른쪽으로 두번 행해지므로 m = m * 2
m *= 2
for i in range(m):
for j in range(m):
A, B = edges[i]
C, D = edges[j]
# A-B, C-D는 그냥 간선이기 때문에, 간선 리스트로 찾을 수 있다.
# 그러므로 A~D가 모두 달라야함.
if A == B or A == C or A == D or B == C or B == D or C == D:
continue
# B-C는 인접행렬 a[B][C]가 True가 아니면 되돌아간다.
if not a[B][C]:
continue
# D-E는 인접 리스트로 찾는다. 예. g = [[1], [0, 2], [1, 3], [2, 4], [3]]
# 이 예.에서는 4가 A, B, C, D와 다 다르기 때문에 print(1)을 내보낸다.
for E in g[D]:
if A == E or B == E or C == E or D == E:
continue
print(1)
sys.exit(0)
# 아무 케이스도 없으면 print(0)을 내보낸다.
print(0)