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

                 

                           

    }

  • 相关阅读:
    影院售票系统
    返璞归真
    【C++】【STL】【map】基础知识干货
    书签-技术类
    正则表达式-正则表达式校验金额最多保留两位小数
    winCommand-cmd杀死进程
    idea快捷键-总结
    接口封装-泛型方法、泛型接口、lambda表达式【类似ios传递block】
    treeMap-get返回null,因为比较器出问题
    git-linux一个月更新80万行代码,如何保证项目稳健?
  • 原文地址:https://www.cnblogs.com/zhanggaosong/p/3145727.html
Copyright © 2011-2022 走看看