C질문이요..
큰꽃들
#include stdio.h
#define NODES 6
#define NO 999
int adj_mat[NODES][NODES] =
{{0, 8, 2, 9, NO, NO},
{NO, 0, NO, NO, 1, NO},
{NO, NO, 0, 1, 15, 0},
{NO, 3, NO, 0, 4, 0},
{NO, NO, 20, NO, 0, 0},
{NO, NO, 2, NO, NO, 0}};
int P[NODES][NODES] =
{{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, -1, -1}};
void mat_print_out();
void floyd_alg();
void path(int, int);
void print_path();
void print_array();
void main()
{
printf(\nAdjacency matrix print : \n);
mat_print_out();
floyd_alg();
print_path();
print_array();
}
void mat_print_out()
{
int i, j;
for (i=0; iNODES; i++)
{
for (j=0; jNODES; j++)
printf(%3d ,adj_mat[i][j]);
printf(\n);
}
printf(\n);
}
void floyd_alg()
{
int i, j, k;
for(k=0; kNODES; k++)
for (i=0; iNODES; i++)
for(j=0; jNODES; j++)
if (adj_mat[i][k] + adj_mat[k][j] adj_mat[i][j])
{
adj_mat[i][j] = adj_mat[i][k] + adj_mat[k][j];
P[i][j] = k;
}
}
void print_path()
{
int i, j;
for (i=0; iNODES; i++)
for (j=0; jNODES; j++)
if(i !=j)
{
printf([%d - %d] : ,i,j);
printf(%d - ,i);
path(i,j);
printf(%d \n,j);
}
}
void path (int from, int to)
{
int k;
k = P[from][to];
if (k!=-1)
{
path(from, k);
printf(%d - ,k);
path(k, to);
}
}
void print_array()
{
int i, j;
printf(\n);
printf(Array adj_mat : \n);
for (i=0; iNODES; i++)
{
for(j=0; jNODES; j++)
printf(%2d , adj_mat[i][j]);
printf(\n);
}
printf(Array P : \n);
for (i=0; iNODES; i++)
{
for (j=0; jNODES; j++)
printf(%2d ,P[i][j]);
printf(\n);
}
printf(\n);
}
노드가 6개 있습니다. 1번 노드, 2번노드,... 이렇게 있는데 배열의 특성상 1번노드를 0으로 표시하구 있습니다.
그래서 2차원배열 0번째 행과, 0번째열을 안쓸려구 하는데 여기에 어떤값을 넣어야할까요?
글구 그것은 방향그래프를 표현한것입니다. 1에서 3으로 가는 간선은 있는데 3에서 1로 가는 간선은 없다고 하면..
999값을 넣어서 표현했는데 괜찮은지? 아님 더 좋은 방법이 있는지 ... 많이 쓰는 방법은 무엇인지 알고싶습니다..
꾸벅..
-
BabySue
넵.. 공책에 그래프 그려서 배열에 값을 넣었고.. 결과는 정확하더군요.. 근데 모가 죄송한지?,ㅡㅡ;;
-
렁찬
죄송합니다. 추적은 해 보셨나요?
-
베이비슈
아..글구 1에서 1로 가는 비용을 0으로 했는데 맞는지? 아님 갈수없다고 999를 표시해야하는지 궁금합니다.