zoukankan      html  css  js  c++  java
  • 一个不错的算法

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

    }

  • 相关阅读:
    GCD (hdu 5726)
    1092
    D. Puzzles(Codeforces Round #362 (Div. 2))
    A. Lorenzo Von Matterhorn
    Polyomino Composer(UVA12291)
    Optimal Symmetric Paths(UVA12295)
    菜鸟物流的运输网络(计蒜客复赛F)
    1193
    1119
    1374
  • 原文地址:https://www.cnblogs.com/zhangyin/p/608435.html
Copyright © 2011-2022 走看看