nullnull图论最短路之bellman-ford
文章结束给大家来个程序员笑话:[M]
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std ;
const int INF = 1000000 ;
const int maxn = 8 ;
int n ;
int edge[ maxn ][ maxn ] ;
int dist[ maxn ] ;
int path[ maxn ] ;
void bellman( int v0 )
{
int i , j , k , u ;
for( i = 0 ; i < n ; i++ )
{
dist[ i ] = edge[ v0 ][ i ] ;
if( i != v0 && dist[ i ] < INF )
path[ i ] = v0 ;
else
path[ i ] = -1 ;
}
for( k = 2 ; k < n ; k++ )
{
for( u = 0 ; u < n ; u++ )
{
if( u != v0 )
{
for( j = 0 ; j < n ; j++ )
{
if( edge[ j ][ u ] < INF && dist[ j ] + edge[ j ][ u ] < dist[ u ] )
{
dist[ u ] = dist[ j ] + edge[ j ][ u ] ;
path[ u ] = j ;
}
}
}
}
}
}
int main()
{
int i , j ;
int u , v , w ;
scanf( "%d" , &n ) ;
while( 1 )
{
scanf( "%d%d%d" , &u , &v , &w ) ;
if( u == -1 && v == -1 && w == -1 )
break ;
edge[ u ][ v ] = w ;
}
for( i = 0 ; i < n ; i++ )
{
for( j = 0 ; j < n ; j++ )
{
if( i == j )
edge[ i ][ j ] = 0 ;
else
if( edge[ i ][ j ] == 0 )
edge[ i ][ j ] = INF ;
}
}
bellman( 0 ) ;
int shortest[ maxn ] ;
for( i = 1 ; i < n ; i++ )
{
printf( "%d\t" , dist[ i ] );
memset( shortest , 0 , sizeof( shortest ) ) ;
int k = 0 ;
shortest[ k ] = i ;
while( path[ shortest[ k ] ] != 0 )
{
k++ ;
shortest[ k ] = path[ shortest[ k - 1 ] ] ;
}
k++ ;
shortest[ k ] = 0 ;
for( j = k ; j > 0 ; j-- )
printf( "%d---->" , shortest[ j ] ) ;
printf( "%d\n" , shortest[ 0 ] ) ;
}
return 0 ;
}
7
0 1 6
0 2 5 0 3 5 1 4 -1 2 1 -2 2 4 1 3 2 -2 3 5 -1 4 6 3 5 6 3 -1 -1 -1 1 0---->3---->2---->1 3 0---->3---->2 5 0---->3 0 0---->3---->2---->1---->4 4 0---->3---->5 3 0---->3---->2---->1---->4---->6
*/
文章结束给大家分享下程序员的一些笑话语录: 与女友分手两月有余,精神萎靡,面带菜色。家人介绍一女孩,昨日与其相亲。女孩果然漂亮,一向吝啬的我决定破例请她吃晚饭。
选了一个蛮贵的西餐厅,点了比较贵的菜。女孩眉开眼笑,与我谈得很投机。聊着聊着,她说:“我给你讲个笑话吧。”“ok”
“一只螳螂要给一只雌蝴蝶介绍对象,见面时发现对方是只雄蜘蛛。见面后螳螂问蝴蝶‘如何?’,‘他长的太难看了’,‘别看人家长的丑,人家还有网站呢’。”
“呵呵………”我笑。忽然她问:“你有网站吗?”

浙公网安备 33010602011771号