#define INF 32767
#define max 10
void dispath(int dist[max],int path[max],int s[max],int n,int v0)
  {
    int i,k;
    for(i=0;i<n;i++)
    {
      if(s[i]==1)
      {
 k=i;
 printf("%d reach %d the least distance is:",v0,i);
 while(k!=v0)
 {
   printf("%d -",k);
   k=path[k];
 }
 printf("%d ",k);
 printf("%d",dist[i]);
      }
      else
 printf("not exist luji");
    }
  }
void dijkstra(int cost[max][max],int n,int v0)
{
  int i,j,u,kao;
  int dist[max];
  int s[max];
  int path[max];
  for(i=0;i<n;i++)
  {
    s[i]=0;
    dist[i]=cost[v0][i];
    if(cost[v0][i]<INF)
     path[i]=v0;
    else
     path[i]=-1;
  }
  s[v0]=1;
  path[v0]=v0;
  for(i=1;i<=n;i++)
  {
    kao=INF;
    u=0;
    for(j=0;j<n;j++)
      if((s[j]==0)&&(dist[j]<kao))
      {
 u=j;
 kao=dist[j];
      }

    s[u]=1;
    for(j=0;j<n;j++)
     if((s[j]==0)&&(cost[u][j]<INF))
       if((dist[u]+cost[u][j])<dist[j])
  dist[j]=dist[u]+cost[u][j];

  }
  }

main()
{
  int i,j,n,v0;
  int cost[max][max];
  printf("please input n:");
  n=scanf("%d",&i);
  printf("please input v0:");
  v0=scanf("%d",&i);
  for(i=0;i<n;i++)
   for(j=0;j<n;j++)
     scanf("%d",&cost[i][j]);
  dijkstra(cost,n,v0);

}

posted on 2006-12-31 01:40  张尹  阅读(195)  评论(0编辑  收藏  举报