ployd(플로이드) 최단 경로 알고리즘 질문!
청력
질문 제목 : 인덱스 시작이 0 인데 1로 바꾸고 싶습니다.
i,j,k를 1로 시작 하고 싶습니다.인덱스 0으로 시작에서 1로 바꾸고 path가 제대로 출력 되도록질문 내용 : #includestdio.h
#define li 9999
int w[5][5] = {
{0,1,li,1,5},
{9,0,3,2,li},
{li,li,0,4,li},
{li, li, 2,0,3},
{3,li,li,li,0}};
int d[5][5];
int p[5][5];
void floyd(int);
void path(int, int);
void main() {
int start = 0;
int end = 2;
floyd(5);
printf( path : v%d , start );
path(start,end);
printf( - v%d\n, end );
}
void floyd(int n) {
int i, j, k;
for(i=0; in; i++)
for(j=0; jn; j++)
p[i][j] = -1;
for(i=0; i=4; i++)
for(j=0; j=4; j++)
d[i][j] = w[i][j];
for(k=0; kn; k++)
for(i=0; in; i++)
for(j=0; jn; j++)
if (d[i][k] + d[k][j] d[i][j]) {
p[i][j] = k;
d[i][j] = d[i][k] + d[k][j];
}
for(i=0; i5; i++){
for(j=0; j5; j++){
printf(%d ,p[i][j]);
}
printf(\n);
}
}
void path(int q, int r) {
if( p[q][r] != -1 )
{
path(q, p[q][r]);
printf(- v%d ,p[q][r]);
path(p[q][r],r);
}
}
///
0에서 1로 바꿔야 되는데 어떻게 바꾸는지 잘 모르겠습니다.
대충 출력에 +1하면 v1~v5가 형성 되지만
i,j,k값을 1로 시작 하면 출력이 되지 않음.
이상태에서 p배열 초기화를 0 으로 해야되는데
인덱스 시작값이 0 이라서 0으로 초기화하면 1이 표시 되지 않음..
어떻게 하는지 좀 알려주세요ㅠㅠ.
-
권시크
배열크기를 1 더 크게 잡으세요.
첫번째 행과 열은 안쓰시면 됩니다.