* 인접행렬은 그래프를 표현하는 방법
- 정점 node / vertex
- 간선 edge
- 그래프는 정점과 간선의 집합
무방향그래프 인접행렬로 만드는 법
1)
5 -> 정점의 개수
6 -> 간선의 개수
- 무방향은 1->2 / 2->1 둘다 가능함
- 2차원 배열에 그래프의 연결정보를 넣어주는 것
- 2차원 배열의 행/열 번호가 정의 번호와 1:1대응임
2) 배열은 전역 변수를 잡아서 0으로 초기화 시킴
3) 1,2를 읽었으면 2차원 배열의 (2.1) , (1,2) 둘다 1을 넣어줌
4) 행이 출발 정점, 열이 도착정점
방향그래프 인접행렬로 만드는 법
1) 1->2로만 간다는 것, (1,2)만 체크함
2) 2 5 는 2->5로 가는 것, (2, 5)만 체크함
반대로 체크하게 하면 암됨!
가중치 방향그래프 인접행렬로 만드는 법
(방향그래프인데, 간선에 가중치(비용)가 있는 것)
1) 1 2 3 => 1행에서 2행으로 가고 간선이 비용은 3이라는 뜻
2) 1행 2열에 (1,2) 간선 값(가중치) 3이 들어감
scanf("%d %d %d", &a, &b, &c); //1 2 3 읽음
map[a][b] = c;
3) 가중치 방향그래프의 인접행렬
//63번 - 인접행렬(가중치 방향그래프)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int map[51][51]; //인접행렬 : 정점의 개수 50개라고 예상
int main() {
freopen("input.txt", "rt", stdin);
int n, m, a, b, c; //정점의 개수 간선의 개수
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d %d %d", &a, &b, &c);
map[a][b] = c; //a행에서 b열로 간다. 이때 간선의 비용값은 c다
//map[a][b] = 1; //무방향 그래프일시
//map[b][a] = 1; //무방향 그래프일시
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
printf("%d ", map[i][j]);
}
printf("\n");
}
return 0;
}
'[알고리즘] 문제풀이 연습' 카테고리의 다른 글
[알골90제] 66번 - 경로찾기:DFS (인접리스트로 풀기/64번과 문제 동일) (0) | 2019.08.05 |
---|---|
[알골90제] 64번-경로탐색 DFS(노드, 간선) / 65번미로탐색 DFS(인접행렬) (0) | 2019.08.05 |
[알골90제] 62번 - 병합정렬 : 분할정복 (복습필수ㅠㅠ) (0) | 2019.08.02 |
[알골90제] 61번 - 특정 수 만들기 : DFS (MS인터뷰) (0) | 2019.08.02 |
[알골90제] 60번 - 합이 같은 부분집합 : DFS (아마존인터뷰) (0) | 2019.08.01 |