• 最短路径 (C语言版)


    最短路径算法

    #include<stdio.h>

    #define N 11

    #define M 1000000

    struct node

    {

           int num; //本来序号

           int lin; //临时性标记

    };

    void main()

    {

           int i,j,t,k,m,test;

           node l[N+1];

           int w[N+1][N+1]={0};

           int cnt=0;//统计节点数

           int c[N+1]={0}; //存放节点

    w[1][2]=676;

    w[1][3]=1813;

    w[2][4]=842;

    w[2][5]=511;

    w[3][5]=695;

    w[3][6]=811;

    w[4][7]=110;

    w[4][8]=967;

    w[5][9]=943;

    w[6][10]=1376;

    w[7][8]=639;

    w[8][9]=902;

    w[8][11]=607;

    w[9][10]=367;

    w[9][11]=672;

    for(i=1;i<N+1;i++)

       for(j=1;j<N+1;j++)

        if(w[i][j] ==0)

                w[i][j]=M;

           for(i=1;i<N+1;i++)

          l[i].num=i;

               l[1].lin=0;

             

              for(i=2;i<N+1;i++)

                     l[i].lin=M;

              for(i=2;i<N+1;i++)

                     l[i].lin=w[1][i];

              for(i=2;i<N+1;i++)

              {

                     for(j=i;j<N+1;j++)

                     {

                            t=l[i-1].lin+w[i-1][j];

                            if(t<l[j].lin)

                                   l[j].lin=t;

                     }

                        

                     for(k=1;k<N+1;k++)

                         printf("%d ",l[k].lin);

                         printf(" ");

                 

                    

                        test= l[i].lin;

                           m=i;

                           for(k=m;k<N+1;k++)

                           {

                                  if(test>l[k].lin)

                                  {

                                         test=l[k].lin;

                                         m=k;

                                  }

                           }

                         if(m !=i)

                         {

                                node temp = l[i];

                                l[i]=l[m];

                                l[m]=temp;

                         }

                    

                 

              }

          

                      for(k=1;k<N+1;k++)

                                   for(m=k+1;m<N+1;m++)

                                          if(l[k].num>l[m].num)

                                          {

                                                 node temp=l[k];

                                                 l[k]=l[m];

                                                 l[m]=temp;

                                          }

       

                  i=N;

                  j=N-1;

           while(j>0)

           {

                  if(l[i].lin == l[j].lin+w[j][i])

                  {

                         i=j;

                         c[cnt]=j;

                         cnt++;

                         j--;

                  }

                  else

                  j--;

           }

           printf("最短路径如下: ");

           for(i=cnt-1;i>=0;i--)

           {

           printf("p-->[%d] ",c[i]);

           }

                  printf("p-->[%d] ",N);

                 

                           

    }

  • 相关阅读:
    Keep it simple & stupid
    BZOJ 2631: tree( LCT )
    BZOJ 2843: 极地旅行社( LCT )
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊( LCT )
    BZOJ 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草( dp )
    BZOJ 3531: [Sdoi2014]旅行( 树链剖分 )
    BZOJ 1269: [AHOI2006]文本编辑器editor( splay )
    BZOJ 2016: [Usaco2010]Chocolate Eating( 二分答案 )
    BZOJ 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛( 二分答案 )
    BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱( dp )
  • 原文地址:https://www.cnblogs.com/zhanggaosong/p/3145727.html
Copyright © 2020-2023  润新知