随笔 - 87  文章 - 279  trackbacks - 0
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

潜心看书研究!

常用链接

留言簿(19)

随笔分类(81)

文章分类(89)

相册

ACM OJ

My friends

搜索

  •  

积分与排名

  • 积分 - 211894
  • 排名 - 116

最新评论

阅读排行榜

评论排行榜

 

#include  < iostream >
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 on 2006-09-22 22:04 阅读(1133) 评论(1)  编辑 收藏 引用 所属分类: 数据结构与算法

FeedBack:
# re: 最短路Bellman-Ford实现 2008-08-11 19:46 白冰
大哥,你的程序连图都没输入进去,怎么计算?我试着把图放到g[][]中去,但是程序输出的结果是错误的,怎么回事?
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理