shortest path 질문입니다.
진솔
#include stdio.h
#define MAX 100
int predecessor();
void shortest(int v);
int check[8]={1,1,1,1,1,1,1,1};//안되면 1 check되면 0으로 바뀝니다.
int current[8]={MAX,MAX,MAX,MAX,MAX,MAX,MAX,MAX};
int graph[8][8]={
{0,8,MAX,MAX,6,10,MAX,MAX},//0행
{8,0,4,MAX,9,MAX,MAX,MAX},//1
{MAX,4,0,8,3,MAX,8,MAX},//2
{MAX,MAX,8,0,MAX,MAX,7,4},//3
{6,9,3,MAX,0,1,12,MAX},//4
{10,MAX,MAX,MAX,1,0,MAX,2},//5
{MAX,MAX,8,7,12,MAX,0,5},//6
{MAX,MAX,MAX,4,MAX,2,5,0}};//7
void main()
{
int i,a;
for(a=0 ;a8 ;a++)
{
shortest(a);
for(i=0 ;i8 ;i++)
{
current[i]=MAX;
check[i]=1;
}
printf(\n);
}
}
void shortest(int v)
{
int tobechecked;
int i,u;
current[v]=0;
while(tobechecked != 0)
{
check[v]=0;
for(u=0 ; u8 ;u++)
{
if(graph[v][u]+current[v]current[u])
current[u]=graph[v][u]+current[v];
}
//v=가장작은u
v=predecessor();
tobechecked=0;
for(i=0 ; i8 ;i++)
{
tobechecked+=check[i];
}
}
for(i=0 ; i8 ;i++)
{
printf(%d\t,current[i]);
}
}
int predecessor()
{
int i,smallvalue=MAX;
for(i=0 ; i8 ;i++)
{
if(check[i]==0)
continue;
else
{
if(smallvaluecurrent[i])
smallvalue=current[i];
}
}
for(i=0 ; i8 ;i++)
{
if(check[i]==0)
continue;
else if(current[i]==smallvalue)
break;
}
return i;
}
이렇게 제가 구현을 했는데 여기에 노드번호, 거리 , 앞노드번호를 차례로 출력하래네요;;
노드번호랑 거리 출력은 하는데 앞노드번호를 어떻게 구하나요????