void ShortestDist( MGraph Graph, int dist[], int count[], Vertex S )
{
for(int i=0;i<Graph->Nv;i++)
{
dist[i]=INFINITY;
count[i]=0;
}
dist[S]=0;count[S]=1;
int visit[1000]={0},cnt=0;
while(cnt<Graph->Nv)
{
int MinLength=INFINITY,flag=-1;
for(int i=0;i<Graph->Nv;i++)
{
if(dist[i]<MinLength&&!visit[i])
{
MinLength=dist[i];
flag=i;
}
}
if(flag==-1){break;}
visit[flag]=1;//设置当前最小点已经访问
cnt++;
for(int i=0;i<Graph->Nv;i++)
{
if(Graph->G[flag][i]>0&&Graph->G[flag][i]!=INFINITY)//存在通路
{
if(dist[flag]+Graph->G[flag][i]<dist[i])//小于
{
dist[i]=dist[flag]+Graph->G[flag][i];
count[i]=count[flag];//重置计数
//printf("%d重置\n",i);
}else if(dist[flag]+Graph->G[flag][i]==dist[i])//等于
{
count[i]+=count[flag];
//printf("%d节点%d\n",i,count[i]);
}
}
}
}
for(int i=0;i<Graph->Nv;i++)
{
if(dist[i]==INFINITY)
{
dist[i]=-1;
count[i]=0;
}
}
}
PTA Shortest Path [3]
最新推荐文章于 2025-05-14 15:14:05 发布