๐ป
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ์ ๊ฐ๋ ๊ณผ ๊ตฌํ ๋ณธ๋ฌธ
๊ทธ๋ํ๋ ์ฌ๋ฌผ์ ์ ์ (Vertex)๊ณผ ๊ฐ์ (Edge)์ผ๋ก ๋ํ๋ด๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค.
๊ทธ๋ํ๋ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
1) ์ธ์ ํ๋ ฌ(Adjacency Matrix) : 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๋ฐฉ์
2) ์ธ์ ๋ฆฌ์คํธ(Adjacency List) : ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
๋ฌด๋ฐฉํฅ ๋น๊ฐ์ค์น ๊ทธ๋ํ์ ์ธ์ ํ๋ ฌ
- ๋ชจ๋ ๊ฐ์ ์ด ๋ฐฉํฅ์ฑ์ ๊ฐ์ง์ง ์๋ ๊ทธ๋ํ๋ฅผ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ผ๊ณ ํฉ๋๋ค.
- ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ๋ฅผ ๋น๊ฐ์ค์น ๊ทธ๋ํ๋ผ๊ณ ํฉ๋๋ค.
- ๋ฌด๋ฐฉํฅ ๋น๊ฐ์ค์น ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์๋ ์ฐ๊ฒฐ๋์ด ์๋ ์ํฉ์ ์ธ์ ํ๋ ฌ๋ก ์ถ๋ ฅํ ์ ์์ต๋๋ค.
#include <stdio.h>
int a[1001][1001];
int n,m;
int main(void){
scanf("%d %d", &n, &m); //๊ฐ์ ์ ๊ฐ์
for(int i=0; i<m; i++){
int x,y;
scanf("%d %d", &x, &y); //์ฐ๊ฒฐ๋์ด ์๋ ์ ์
//๋ฐฉํฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ค.
a[x][y] = 1;
a[y][x] = 1;
}
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
printf("%d ", a[i][j]); //๋ฐฐ์ด ์ถ๋ ฅ
}
}
}
๋ฐฉํฅ ๊ฐ์ค์น ๊ทธ๋ํ์ ์ธ์ ๋ฆฌ์คํธ
- ๋ชจ๋ ๊ฐ์ ์ด ๋ฐฉํฅ์ ๊ฐ์ง๋ ๊ทธ๋ํ๋ฅผ ๋ฐฉํฅ ๊ทธ๋ํ๋ผ๊ณ ํฉ๋๋ค.
- ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ๋ฅผ ๊ฐ์ค์น ๊ทธ๋ํ๋ผ๊ณ ํฉ๋๋ค.
- ๋ฐฉํฅ ๊ฐ์ค์น ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋ ์ฐ๊ฒฐ๋์ด ์๋ ์ํฉ์ ์ธ์ ๋ฆฌ์คํธ๋ก ์ถ๋ ฅํ ์ ์์ต๋๋ค.
#include <stdio.h>
#include <stdlib.h>
/* ์คํ๊ธฐ๋ฐ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ */
typedef struct {
int index;
int distance;
struct Node *next; // ๋ค์ ๋
ธ๋๋ฅด ๊ธฐ๋ก
} Node;
/* ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์์๋ค๊ฐ ์ฐจ๋ก๋๋ก */
void addFront(Node *root, int index, int distance){
Node *node = (Node*)malloc(sizeof(Node));
node->index = index;
node->distance = distance;
node->next = root->next;
root->next = node;
}
void showAll(Node *root){
Node *cur = root->next;
while(cur!=NULL){
printf("%d(๊ฑฐ๋ฆฌ: %d)", cur->index, cur->distance);
cur = cur -> next;
}
}
int main(void){
int n,m;
scanf("%d %d", &n, &m);
Node** a = (Node**)malloc(sizeof(Node*) * (n+1))l
for(int i=1; i<=n; i++){
a[i] = (Node*)malloc(sizeof(Node));
a[i]->next = NULL;
}
for(int i=0; i<m; i++){
int x, y, distance;
scanf("%d %d %d", &x, &y, &distance);
addFront(a[x], y, distance);
}
for(int i=1; i<=n; i++){
printf("์์ [%d]: ", i);
showAll(a[i]); //ํน์ ํ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ค๋ฅธ ์ ์ ๋ค์ ์ถ๋ ฅํ๋ ํจ์
printf("\n");
}
return 0;
}
* ์ ๋ฆฌ
1) ์ธ์ ํ๋ ฌ์ ๋ชจ๋ ์ ์ ๋ค์ ์ฐ๊ฒฐ ์ฌ๋ถ๋ฅผ ์ ์ฅํ์ฌ O(V^2)์ ๊ณต๊ฐ์ ์๊ตฌํ๋ฏ๋ก ๊ณต๊ฐ ํจ์จ์ฑ์ด ๋จ์ด์ง์ง๋ง ๋ ์ ์ ์ด ์๋ก ์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด O(1)์ ์๊ฐ์ ์๊ตฌํฉ๋๋ค.
2) ์ธ์ ๋ฆฌ์คํธ๋ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ์ ๋ณด๋ง์ ์ ์ฅํ์ฌ O(E)์ ๊ณต๊ฐ์ ์๊ตฌํ๋ฏ๋ก ๊ณต๊ฐ ํจ์จ์ฑ์ด ์ฐ์ํ์ง๋ง ๋ ์ ์ ์ด ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ง ํ์ธํ๊ธฐ ์ํด O(V)์ ์๊ฐ์ ์๊ตฌํฉ๋๋ค.
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) (0) | 2020.11.13 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๋๋น ์ฐ์ ํ์(BFS) (0) | 2020.02.21 |
[์๋ฃ๊ตฌ์กฐ] ๊น์ด ์ฐ์ ํ์(DFS) (0) | 2020.02.21 |
[์๋ฃ๊ตฌ์กฐ] ์ฐ์ ์์ ํ (0) | 2020.02.18 |