距离矢量路由算法(最短路Bellman-Ford实现)实现

using   namespace  std;

 
const   int  MAXN  =   100 ;
 
const   int  MAXV  =  MAXN  *  MAXN;
 
const   int  INF  =   2000000000 ;

 
struct  EDGE
  
{
     
int  u, v;
}
 ;

 
int  g[MAXN][MAXN];
EDGE e[MAXV];

 
int  BellmanFord( int  beg,  int  end,  int  nNum,  int  eNum)
  
// nNum为顶点数, eNum为边数, 复杂度O(VE) 
      int  d[MAXN];
     
int  i, k;

     
for  (i = 0 ; i < nNum; i ++ )
        d[i]  
=  INF;
    d[beg]  
=   0 ;
    
     
bool  ex  =   true ;
     
for  (k = 1 ; k < nNum  &&  ex; k ++ )
      
{
        ex  
=   false ;
         
for  (i = 0 ; i < eNum; i ++ )
             
if  (d[e[i].u]  <  INF  &&  d[e[i].v]  >  d[e[i].u]  +  g[e[i].u][e[i].v])
              
{
                d[e[i].v]  
=  d[e[i].u]  +  g[e[i].u][e[i].v];
                ex  
=   true ;
            }
 
    }
 
 
     
return  d[end];
}
 
 
 
int  main()
  
{
     
int  i, j;
     
int  t  =   0 ;
     
int  eNum  =   0 ;
     
int  nNum  =   9 ;
     
for  (i = 0 ; i < 4 ; i ++ )
         
for  (j = 0 ; j < 4 ; j ++ )
          
{
             
if  (i  ==  j) 
              
{
                g[i][j]  
=  INF;
            }
 
             
else 
               
{
                g[i][j]  
=   ++ t;
                e[eNum].u  
=  i;
                e[eNum].v  
=  j;
                eNum 
++ ;
            }
 
        }
     
    cout  
<<  BellmanFord( 2 ,  3 , nNum, eNum)  <<  endl;
     
return   0 ;
}
 
posted @ 2008-05-25 20:44 阅读(281) 评论(4)  编辑 收藏

  回复  引用    
#1楼 2008-05-27 01:59 | dsa [未注册用户]
可不可以写一个java版本的
  回复  引用  查看    
#2楼 [楼主]2008-05-27 13:50 |       
@dsa
由于是我的网络作业,要求有界面控制的,java的写界面太麻烦了,不过我这有个c#版的可以动态添加节点的.
  回复  引用    
#3楼 2008-07-25 23:37 | zjfc-3 [未注册用户]
有没有邻接表版本的
  回复  引用    
#4楼 2008-09-03 11:33 | Torres [未注册用户]
这个版本我在不同的地方看到了好多次,来点儿原创的吧


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: