poj1502

最短路

ContractedBlock.gif ExpandedBlockStart.gif View Code
#include  < iostream >
#include 
< cstdio >
#include 
< cstdlib >
#include 
< cstring >
using   namespace  std;

#define  inf 0x3f3f3f3f
#define  maxn 105

int  vis[maxn];
int  cost[maxn][maxn];
int  lowcost[maxn];
int  n;

void  dijkstra( int  beg)
{
    
int  i, j, min;
    memset(vis, 
0 sizeof (vis));
    vis[beg] 
=   1 ;
    
for  (i  =   0 ; i  <  n; i ++ )
        lowcost[i] 
=  cost[beg][i];
    lowcost[beg] 
=   0 ;
    
int  pre  =  beg;
    
for  (i  =   1 ; i  <  n; i ++ )
    {
        min 
=  inf;
        
for  (j  =   0 ; j  <  n; j ++ )
            
if  (vis[j]  ==   0   &&  lowcost[pre]  +  cost[pre][j]  <  lowcost[j])
                lowcost[j] 
=  lowcost[pre]  +  cost[pre][j];
        
for  (j  =   0 ; j  <  n; j ++ )
            
if  (vis[j]  ==   0   &&  lowcost[j]  <  min)
            {
                min 
=  lowcost[j];
                pre 
=  j;
            }
        vis[pre] 
=   1 ;
    }
}

void  input()
{
    
char  st[ 100 ];
    
for  ( int  i  =   1 ; i  <  n; i ++ )
        
for  ( int  j  =   0 ; j  <  i; j ++ )
        {
            scanf(
" %s " , st);
            
if  (st[ 0 ==   ' x ' )
                cost[i][j] 
=  cost[j][i]  =  inf;
            
else
                cost[i][j] 
=  cost[j][i]  =  atoi(st);
        }
}

int  main()
{
    
// freopen("t.txt", "r", stdin);
    scanf( " %d " & n);
    input();
    dijkstra(
0 );
    
int  ans  =   0 ;
    
for  ( int  i  =   0 ; i  <  n; i ++ )
        ans 
=  max(ans, lowcost[i]);
    printf(
" %d\n " , ans);
    
return   0 ;
}

转载于:https://www.cnblogs.com/rainydays/archive/2011/07/14/2106094.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值