void ShortestPath_DIJ( Node a ,Status i ,Status v0 ,Status *D ,Status *pre )
{
int v,w,j,l=1;
Status *final;
Status min;
final=(Status *)malloc( sizeof(Status)*i );
for(v=0;v<i;v++)
{
final[v]=FALSE;
pre[v]=FALSE;
D[v]=a[v0][v];
if(D[v]<10000)
pre[v]=v0;
}
for(v=0;v<i;v++)
{
if( a[v0][v]==10000 )
l++;
}
if(l>i)
{
printf("\n从v%d出发没有最短路径到其他端点!\n",v0);
exit(0);
}
D[v0]=0; final[v0]=TRUE;
for( j=0 ; j<i ; ++j )
{
min=MaxNum;
for( w=0 ; w<i ; w++)
{
if( !final[w] )
{
if( D[w]<min )
{
v=w;min=D[w];
}
}
}
final[v]=TRUE;
for( w=0 ; w<i ; w++ )
{
if( !final[w] && ( (min+a[v][w])<D[w]) )
{
D[w]=min+a[v][w];
pre[w]=v;
}
}
}
}