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) 编辑 收藏