지금 밑에 있는 코드를 이중포인터를 이용해서 똑같이 작동하게 하고 싶은데

어떻게 해야 할 지 감이 안잡힙니다.


그래프 타입 안에

int adj_mat[][]; 이것을

int** adj_mat;

로 바꾸고 싶고

int visited[];

이걸 그래프 타입 안으로 옮겨서

int* visited;

처럼 이중포인터로 바꾸고 싶은데

그럼 동적할당을

void init(GraphType* g, int k)

로 받아서 k는 정점의 수를 받고

안에서

for(int i = 0; i<k; i++)

{

for(int j = 0; j<k; j++)

{


}

}

이런 식으로 하고 싶은데 참고할 수 있는 자료나 조언 부탁드립니다.



#include <stdio.h>

#include <stdlib.h>

#define TRUE 1

#define FALSE 0

#define MAX_VERTICES 50

typedef struct GraphType {

int n; // 정점의 개수

int adj_mat[MAX_VERTICES][MAX_VERTICES];

} GraphType;


int visited[MAX_VERTICES];


// 그래프 초기화 

void init(GraphType* g)

{

int r, c;

g->n = 0;

for (r = 0; r < MAX_VERTICES; r++)

for (c = 0; c < MAX_VERTICES; c++)

g->adj_mat[r][c] = 0;

}

// 정점 삽입 연산

void insert_vertex(GraphType* g, int v)

{

if (((g->n) + 1) > MAX_VERTICES) {

fprintf(stderr, "그래프: 정점의 개수 초과");

return;

}

g->n++;

}

// 간선 삽입 연산

void insert_edge(GraphType* g, int start, int end)

{

if (start >= g->n || end >= g->n) {

fprintf(stderr, "그래프: 정점 번호 오류");

return;

}

g->adj_mat[start]+ = 1;

g->adj_mat+[start] = 1;

}

// 인접 행렬로 표현된 그래프에 대한 깊이 우선 탐색

void dfs_mat(GraphType* g, int v)

{

int w;

visited[v] = TRUE; // 정점 v의 방문 표시 

printf("정점 %d -> ", v); // 방문한 정점 출력

for (w = 0; w < g->n; w++) // 인접 정점 탐색

if (g->adj_mat[v][w] && !visited[w])

dfs_mat(g, w); //정점 w에서 DFS 새로 시작

}

int main(void)

{

GraphType* g;

g = (GraphType*)malloc(sizeof(GraphType));

init(g);

for (int i = 0; i < 4; i++)

insert_vertex(g, i);

insert_edge(g, 0, 1);

insert_edge(g, 0, 2);

insert_edge(g, 0, 3);

insert_edge(g, 1, 2);

insert_edge(g, 2, 3);


printf("깊이 우선 탐색\n");

dfs_mat(g, 0);

printf("\n");

free(g);

return 0;

}