zoukankan      html  css  js  c++  java
  • 最短路径 (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);

                 

                           

    }

  • 相关阅读:
    ASP.NETRazor注解 @section Scripts{}的使用
    JavaScript快速查找节点
    JavaScript快速查找节点
    javascript中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX
    javascript中offsetWidth、clientWidth、width、scrollWidth、clientX、screenX、offsetX、pageX
    JavaScript substr() 方法
    JavaScript substr() 方法
    5月面试了120多人后,我们总结了6点问题
    5月面试了120多人后,我们总结了6点问题
    Math.floor() 返回小于或等于一个给定数字的最大整数。
  • 原文地址:https://www.cnblogs.com/zhanggaosong/p/3145727.html
Copyright © 2011-2022 走看看