CS/알고리즘_개념

그래프 개념

Jedy_Kim 2021. 6. 2. 13:42
728x90

 

# 인접 행렬 구하기 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
 
# 5 6 (정점의 갯수, 간선의 갯수)
# 1 2 (간선의 정보)
# 1 3
# 1 4
# 2 4
# 4 5
# 3 5
 
# Q1. 정점 X와 Y가 연결이 되어 있는가? (Yes or No)
# Q2. 정점 X와 연결이 되어 있는 모든 정점을 출력하시오.
 
# myGraph에서  x와 y가 연결이 되어 있으면 True 아니면 False를 반환
def isConnected(myGraph, x, y):
  if myGraph[x][y] == 1return True
  elsereturn False
 
# 인접해 있는 모든 정점을 출력하시오.  
def getAdj(myGraph, x, n):
  # adjacent node : 인접해있는 노드
  # n개의 정점을 갖는 myGraph에서 x와 연결되어 있는 모든 정점을 출력하는 함수
  for i in range(1, n+1):
    if myGraph[x][i] == 1:
      print(i, end=' ')
  print()
  
 
if __name__ == "__main__":
  n, m = map(int, sys.stdin.readline().split()) # n : 정점의 갯수, m : 간선의 갯수
  myGraph = [[0 for _ in range(10)] for _ in range(10)]
  mInfo = []
  
  for i in range(m):
    a, b = map(int, sys.stdin.readline().split()) # a와 b가 연결이 되어 있다.
    myGraph[a][b] = 1
    myGraph[b][a] = 1
    
  for i in range(1, n+1):
    for j in range(1, n+1):
      print(myGraph[i][j], end=' ')
    print()
    
  print(isConnected(myGraph, 12))
  print(isConnected(myGraph, 15))
  
  getAdj(myGraph, 2, n)
  getAdj(myGraph, 4, n)
cs

#인접리스트 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import sys
 
# 1 : 2 3 4
# 2 : 1 4
# 3 : 1 5
# 4 : 1 2 5
# 5 : 3 4
'''
5 6
1 2
1 3
1 4
2 4
3 5
4 5
'''
 
if __name__ == "__main__":
  input = sys.stdin.readline
  n, m    = map(int, input().split())
  myGraph = [[] for _ in range(n+1)]
  
  # 인접 리스트 구현 
  for _ in range(m):
    a, b = map(int, input().split())
    myGraph[a].append(b)
    myGraph[b].append(a)
    
  # 출력  
  for i in range(n+1):
    print(' i : ', i, end=' ')
    for j in myGraph[i]:
      print(j, end=' ')
    print()
  print(myGraph)
cs
입력
5 6
1 2
1 3
1 4
2 4
3 5
4 5
출력
1 : 2 3 4 
2 : 1 4 
3 : 1 5 
4 : 1 2 5 
5 : 3 4 
{1: [2, 3, 4], 2: [1, 4], 3: [1, 5], 4: [1, 2, 5], 5: [3, 4]}
반응형