• 一个不错的算法


    #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);

    }

  • 相关阅读:
    第二学期,第0次作业
    最后一次作业——总结报告
    第14、15周作业
    第七周作业
    第6周作业
    第四周作业
    “黄领衫”获奖感言
    2018上C语言程序设计(高级)作业- 第4次作业
    2018上C语言程序设计(高级)作业- 第3次作业
    2018上C语言程序设计(高级)作业- 第2次作业
  • 原文地址:https://www.cnblogs.com/zhangyin/p/608435.html
Copyright © 2020-2023  润新知