您的位置:首页 > 理论基础 > 计算机网络

http://acm.hdu.edu.cn/showproblem.php?pid=1874

2013-12-01 12:47 323 查看
hdu的1874题
用flowd算法AC
代码如下:要注意输入边的判断。
#include <iostream>

#define mx 999999

using namespace std;

int edge[202][202] ;

int a , b, x , s , t , n , m;
int main()
{
while(cin >> n >> m)
{
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
edge[i][j] = mx ;

for(int i = 0;i < m; i ++)
{
cin >> a >>b >> x ;
if(edge[a][b] != mx)
{
if(edge[a][b] > x)
edge[a][b] = edge[b][a] = x ;
}
else
edge[a][b] = edge[b][a] = x ;
}
cin >> s >> t ;

for(int k = 0; k < n; k ++)
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
if(edge[i][j] > edge[i][k] + edge[k][j])
{
edge[i][j] = edge[i][k] + edge[k][j] ;
}
if(s == t)
cout << 0 << endl ;
else if(edge[s][t] == mx)
cout << -1 << endl;
else
cout << edge[s][t] << endl;
}
return 0 ;
}
 
用dijkstra算法
#include <iostream>#define mx 100000000using namespace std;int edge[202][202] ;int dist[202] ;int visit[202] ;int s , t , n , m , a , b , x ;void dijkstra(){    int index = -1;    int miner = mx ;    for(int i = 0; i < n; i ++)    {        if(!visit[i] && miner > dist[i])        {            miner = dist[i] ;            index = i ;        }    }    if(index == -1) return ;    visit[index] = 1 ;    for(int i = 0; i < n; i ++)     if(!visit[i] && dist[i] > dist[index] + edge[index][i])     {         dist[i] = dist[index] + edge[index][i] ;     }     dijkstra();  //说来也不好意思,这句我老是忘记,导致我错了好多次,还发现不了。再接再厉!}void init(){    for(int i = 0; i < n; i ++)       for(int j = 0; j < n; j ++)         if(i == j)           edge[i][j] = 0 ;        else         edge[i][j] =  mx ;    for(int i = 0; i < m; i ++)    {        cin >> a >> b >> x ;        if(edge[a][b] > x)          edge[a][b] = edge[b][a] = x ;    }}int main(){    while(cin >> n >> m)    {        init() ;        cin >> s >> t ;        for(int i = 0; i < n; i ++)        {            visit[i] = 0;            dist[i] = edge[s][i] ;        }        dist[s] = 0;        visit[s] = 1 ;        dijkstra();        if(dist[t] == mx) cout << -1 << endl ;        else          cout << dist[t] << endl;    }    return 0;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu1874