โ๏ธ๊ทธ๋ํ ํํ
๊ตฌํํ ๊ทธ๋ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ์ค์น๊ฐ ์๋ ๋ฌดํฅ๊ทธ๋ํ ์ด๋ค.
โ๏ธ์ธ์ ํ๋ ฌ(Adjacenty Matrix) -> ์ธ์ ๋ฆฌ์คํธ(Adjacenty List) ๊ตฌํ
์ ๊ทธ๋ํ์ ์ธ์ ํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ ์ ์ ๋ณ๋ก ๊ฐ์ ์ด ์์ผ๋ฉด 1, ์์ผ๋ฉด 0 ์ผ๋ก ํํํ๋ค.
#define N 9
int matrix[N][N] = {
{0,1,0,0,0,0,0,0,0},
{1,0,1,1,0,0,0,0,0},
{0,1,0,1,1,0,0,0,0},
{0,1,1,0,1,1,0,0,0},
{0,0,1,1,0,0,0,0,0},
{0,0,0,1,0,0,1,1,0},
{0,0,0,0,0,1,0,1,1},
{0,0,0,0,0,1,1,0,0},
{0,0,0,0,0,0,1,0,0},
};
์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ํ ๊ตฌ์กฐ์ฒด ์ ์ธ ๋ฐ ์ด๊ธฐํ.
#include <stdio.h>
#include <malloc.h>
#define N 9
#define FALSE 0
#define TRUE 1
typedef struct list_node { //๊ตฌ์กฐ์ฒด ์ ์ธ
int vertex;
struct list_node* link;
}NODE;
NODE* graph[N]; //์ ์ ์ ๊ฐ์ 1๋ฒ~9๋ฒ (ํฌ์ธํฐ ๋ณ์๋ก ์ ์ธ)
int matrix[N][N] = {
{0,1,0,0,0,0,0,0,0},
{1,0,1,1,0,0,0,0,0},
{0,1,0,1,1,0,0,0,0},
{0,1,1,0,1,1,0,0,0},
{0,0,1,1,0,0,0,0,0},
{0,0,0,1,0,0,1,1,0},
{0,0,0,0,0,1,0,1,1},
{0,0,0,0,0,1,1,0,0},
{0,0,0,0,0,0,1,0,0},
};
int main()
{
int i;
for (i = 0; i < N; i++) { //๊ฐ ์ ์ NULL๋ก ์ด๊ธฐํ
graph[i] = NULL;
}
create_adj_list(); //์ฐ๊ฒฐ๋ฆฌ์คํธ ์์ฑ
}
create_adj_list ์์ฑ
void create_adj_list() {
NODE* temp;
for (int i = 0; i < N; i++) {
for (int j = N - 1; j >= 0; j--) {
if (matrix[i][j] != 0) {
temp = (NODE*)malloc(sizeof(NODE));
temp->vertex = j;
temp->link = graph[i];
graph[i] = temp;
}
}
}
}
์ธ์ ํ๋ ฌ์์ ๊ฐ ์ ์ (i)๋ณ๋ก ๊ฐ์ ์ด ์๋ค๋ฉด ๋ฆฌ์คํธ์ ๋ถ์ธ๋ค๋ ํจ์๋ค.
๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ง๋ ๊ณผ์ ์ ์ดํดํด ๋ณด์.
*์ธ์ ํ ํ๋ ฌ์ด ์์ ๋ if๋ฌธ์ผ๋ก ๋ค์ด๊ฐ๋ค.
i = 0, j = 1์ผ๋.
i = 1, j = 3 ์ผ๋.
i = 1, j = 2 ์ผ๋.
i = 1, j = 0 ์ผ๋.
๋ชจ๋ ์ ์ (i = 0~8) ์ ๋๋ฉด์ธ์ ๋ฆฌ์คํธ๊ฐ ๋ง๋ค์ด์ง๋ค.
โ๏ธ์ ์ฒด ์ฝ๋ ๋ฐ ์ํ ๊ฒฐ๊ณผ
#include <stdio.h>
#include <malloc.h>
#define N 9
#define FALSE 0
#define TRUE 1
typedef struct list_node {
int vertex;
struct list_node* link;
}NODE;
NODE* graph[N];
int matrix[N][N] = { //์ธ์ ํ๋ ฌ๋ก ๊ทธ๋ํ ํํ.
{0,1,0,0,0,0,0,0,0},
{1,0,1,1,0,0,0,0,0},
{0,1,0,1,1,0,0,0,0},
{0,1,1,0,1,1,0,0,0},
{0,0,1,1,0,0,0,0,0},
{0,0,0,1,0,0,1,1,0},
{0,0,0,0,0,1,0,1,1},
{0,0,0,0,0,1,1,0,0},
{0,0,0,0,0,0,1,0,0},
};
void create() {
NODE* temp;
for (int i = 0; i < N; i++) {
for (int j = N - 1; j >= 0; j--) {
if (matrix[i][j] != 0) {
temp = (NODE*)malloc(sizeof(NODE));
temp->vertex = j;
temp->link = graph[i];
graph[i] = temp;
}
}
}
}
int main()
{
int i;
NODE* temp;
for (i = 0; i < N; i++) { //๊ฐ ์ ์ NULL๋ก ์ด๊ธฐํ
graph[i] = NULL;
}
create_adj_list(); //์ฐ๊ฒฐ๋ฆฌ์คํธ ์์ฑ
for (i = 0; i < N; i++) { //์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ์ ๋ง๋ค์ด์ก๋์ง ํ์ธํด๋ณด๊ธฐ์ํจ.
printf("%d-th node ", i);
temp = graph[i];
while (temp)
{
printf("%d ", temp->vertex);
temp = temp->link;
}
printf("\n");
}
}
'๐คฏ ๋ฐ์ดํฐ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ด์งํ์ ์ ๋ฆฌ (0) | 2023.05.16 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ DFS(2) (0) | 2022.12.01 |
[์๊ณ ๋ฆฌ์ฆ] ์ฝ์ ์ ๋ ฌ ๊ตฌํ (c์ธ์ด) (0) | 2022.11.12 |
[์๊ณ ๋ฆฌ์ฆ] ๋ฒ๋ธ ์ ๋ ฌ ๊ตฌํ (c์ธ์ด) (0) | 2022.11.10 |
[์๊ณ ๋ฆฌ์ฆ] ์ ํ ์ ๋ ฌ ๊ตฌํ (c์ธ์ด) (0) | 2022.11.10 |