Floyd最短路算法的MATLAB程序.docx

上传人:b****0 文档编号:12447170 上传时间:2023-04-19 格式:DOCX 页数:14 大小:18.76KB
下载 相关 举报
Floyd最短路算法的MATLAB程序.docx_第1页
第1页 / 共14页
Floyd最短路算法的MATLAB程序.docx_第2页
第2页 / 共14页
Floyd最短路算法的MATLAB程序.docx_第3页
第3页 / 共14页
Floyd最短路算法的MATLAB程序.docx_第4页
第4页 / 共14页
Floyd最短路算法的MATLAB程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Floyd最短路算法的MATLAB程序.docx

《Floyd最短路算法的MATLAB程序.docx》由会员分享,可在线阅读,更多相关《Floyd最短路算法的MATLAB程序.docx(14页珍藏版)》请在冰豆网上搜索。

Floyd最短路算法的MATLAB程序.docx

Floyd最短路算法的MATLAB程序

Floyd最短路算法的MATLAB程序

2006-08-1720:

14

             %floyd.m

             %采用floyd算法计算图a中每对顶点最短路

             %d是矩离矩阵

             %r是路由矩阵

             function[d,r]=floyd(a)

             n=size(a,1);

             d=a;

             fori=1:

n

                 forj=1:

n

                     r(i,j)=j;

                 end

             end

             r

             fork=1:

n

                 fori=1:

n

                     forj=1:

n

                         ifd(i,k)+d(k,j)

                             d(i,j)=d(i,k)+d(k,j);

                             r(i,j)=r(i,k)

                         end

                     end

                 end

                 k

                 d

                 r

             end

void Dijkstral(int v0) 

 {   

             int i; 

             bool s[MAX_VEX]; 

             for(i=0;i

             { 

                  d[v0][i]=map[v0][i]; 

                  s[i]=false; 

                  if((i!

=0)&&(d[v0][i]

                       p[v0][i]=v0; 

                  else 

                       p[v0][i]=-1; 

             } 

             s[v0]=true; 

             d[v0][v0]=0; 

             for(i=0;i

             { 

                   double min=INF; 

                   int u=v0; 

                   for(int j=0;j

                       if(!

s[j]&&d[v0][j]

                       { 

                             u=j; 

                             min=d[v0][j]; 

                       } 

                  s[u]=true; 

  

                  for(int w=0;w

                  { 

                       if((!

s[w])&&(d[v0][w]>d[v0][u]+map[u][w])) 

                       { 

                              d[v0][w]=d[v0][u]+map[u][w]; 

                              p[v0][w]=u; 

                       } 

                  } 

              } 

  

  

 }

Justin  Hou 

  

 介绍 

 寻找最有价值路径(c语言)  

  

 描述:

  

  

 从上(入口)往下行走,直到最下节点(出口)结束,将所经节点上的数值相加,要求找到一条最有价值路径(既是路径总数值最大)并输出总数值。

  

  

 图:

  

  

 入口   ↓  

      ③  

      /\  

     ⑤    ④  

               /    \  /  \  

    ①    ②    ⑤  

               \  /    \  /  

                 ⑨    ⑧  

                   \    /  

                     ③  

 出口            ↓  

 输入文件:

(abc.in)  

  

 第一行只有一个数n(1<=n<=199),且n为奇数,说明节点的层。

从第二行到底n+1行为每一层中各节点的数值(在0和100之间),各个数用空格隔开,输入不要求判错。

  

  

 输出文件:

(abc.out)  

  

 只有一个数,为所求路径的价值数。

  

  

 例子:

  

  

 输入文件内容:

  

 5  

 3  

 5  4  

 1  2  5  

 9  8  

 3  

 输出文件内容:

  

 23  

  

 正文 

 /*  

   *  File:

                longest.c  

   *  Desciption:

    动态规划算法计算网络的最长路线和最短路线  

   *  Created:

          2001/12/2  

   *  Author:

            Justin  Hou  [mailto:

justin_hou@]  

   *  

   */  

 #include    

 #define    N    7                                                            /*  顶点数目          */  

 #define    I    999                                                        /*  表示无穷大      */  

  

 int  graph[N][N]  =  {                                                /*  图的邻接矩阵  */  

                 {I,  4,  5,  8,  I,  I,  I},  

                 {I,  I,  I,  6,  6,  I,  I},  

                 {I,  I,  I,  5,  I,  7,  I},  

                 {I,  I,  I,  I,  8,  9,  9},  

                 {I,  I,  I,  I,  I,  I,  5},  

                 {I,  I,  I,  I,  I,  I,  4},  

                 {I,  I,  I,  I,  I,  I,  I}  

 };  

 int  List[N];                                                                /*  存放拓扑序列  */  

  

 int  TopologicalOrder();                                          /*  拓扑排序函数  */  

  

 void  main()                                                                  /*  主  函  数          */  

 {  

                 int  i,  j,  k,  l;  

                 int  ee[N],  el[N];                                    /*  最长最短距离  */  

                 int  path_e[N][N],  path_l[N][N],  n_e[N],  n_l[N];  

                                                              /*  记录路径数据  */  

  

                 /*  初始化数据  */  

                 for  (i  =  0;  i  <  N;  i++)  {  

                                 n_e[i]  =  0;        /*  到  i  的最短路线的结点数  */  

                                 n_l[i]  =  0;        /*  到  i  的最长路线的结点数  */  

                                 ee[i]  =  I;  

                                 el[i]  =  0;  

                 }  

                 ee[0]  =  el[0]  =  0;          /*  初始化头结点  */  

                 path_e[0][0]  =  0;  

                 path_l[0][0]  =  0;  

                 n_e[0]  =  1;  

                 n_l[0]  =  1;  

  

                 /*  拓扑排序  */  

                 if  (!

TopologicalOrder())  

                                 return;  

  

  

 未完 

 Top

2楼atlantis13579(更深的蓝)(^_^)回复于2002-07-2115:

42:

06得分0

作者 Justin  Hou 

  

 介绍 

 寻找最有价值路径(c语言)  

  

 描述:

  

  

 从上(入口)往下行走,直到最下节点(出口)结束,将所经节点上的数值相加,要求找到一条最有价值路径(既是路径总数值最大)并输出总数值。

  

  

 图:

  

  

 入口   ↓  

      ③  

      /\  

     ⑤    ④  

               /    \  /  \  

    ①    ②    ⑤  

               \  /    \  /  

                 ⑨    ⑧  

                   \    /  

                     ③  

 出口            ↓  

 输入文件:

(abc.in)  

  

 第一行只有一个数n(1<=n<=199),且n为奇数,说明节点的层。

从第二行到底n+1行为每一层中各节点的数值(在0和100之间),各个数用空格隔开,输入不要求判错。

  

  

 输出文件:

(abc.out)  

  

 只有一个数,为所求路径的价值数。

  

  

 例子:

  

  

 输入文件内容:

  

 5  

 3  

 5  4  

 1  2  5  

 9  8  

 3  

 输出文件内容:

  

 23  

  

 正文 

 /*  

   *  File:

                longest.c  

   *  Desciption:

    动态规划算法计算网络的最长路线和最短路线  

   *  Created:

          2001/12/2  

   *  Author:

            Justin  Hou  [mailto:

justin_hou@]  

   *  

   */  

 #include    

 #define    N    7                                                            /*  顶点数目          */  

 #define    I    999                                                        /*  表示无穷大      */  

  

 int  graph[N][N]  =  {                                                /*  图的邻接矩阵  */  

                 {I,  4,  5,  8,  I,  I,  I},  

                 {I,  I,  I,  6,  6,  I,  I},  

                 {I,  I,  I,  5,  I,  7,  I},  

                 {I,  I,  I,  I,  8,  9,  9},  

                 {I,  I,  I,  I,  I,  I,  5},  

                 {I,  I,  I,  I,  I,  I,  4},  

                 {I,  I,  I,  I,  I,  I,  I}  

 };  

 int  List[N];            

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1