码迷,mamicode.com
首页 > 其他好文 > 详细

zoj 2027 Travelling Fee

时间:2015-05-19 16:22:37      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

SPFA+枚举。

每条边的权值都设置一次为0 用一次SPFA,算出最短路,每次的最短路取最小值就是答案。

 

 

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<map>
#include<queue>
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;

const int maxn=210;
map<string,int>zh;
vector<int>ljb[maxn];
int cost[maxn][maxn];//邻接矩阵
string s,s1,s2;
int qidian,zhongdian,n,id;
int dist[maxn],flag[maxn];

void spfa()
{
    int iii;
    queue<int>Q;
    memset(flag,0,sizeof(flag));
    for(iii=0;iii<id;iii++) dist[iii]=999999999;
    dist[qidian]=0;Q.push(qidian);flag[qidian]=1;
    while(!Q.empty())
    {
        int h=Q.front(); Q.pop(); flag[h]=0;
        for(iii=0;iii<ljb[h].size();iii++)
        {
            if(cost[h][ljb[h][iii]]!=999999999)
            {
                if(dist[h]+cost[h][ljb[h][iii]]<dist[ljb[h][iii]])
                {
                    dist[ljb[h][iii]]=dist[h]+cost[h][ljb[h][iii]];
                    if(flag[ljb[h][iii]]==0) 
                    {
                        Q.push(ljb[h][iii]);
                        flag[ljb[h][iii]]=1;
                    }
                }
            }
        }
    }
}

int main()
{
    int i,j,cc;
    while(cin>>s)
    {
    for(i=0;i<210;i++) ljb[i].clear();
    zh.clear();
    id=1; zh[s]=id;id++;
    qidian=1;zhongdian=2;cin>>s;
    zh[s]=id;id++;
    scanf("%d",&n);
    for(i=0;i<=205;i++)
    {
        for(j=0;j<=205;j++)
        {
            if(i==j) cost[i][j]=0;
            else cost[i][j]=999999999;
        }
    }
    for(i=0;i<n;i++)
    {
        cin>>s1>>s2>>cc;
        if(zh[s1]==0)zh[s1]=id,id++;
        if(zh[s2]==0)zh[s2]=id,id++;
        cost[zh[s1]][zh[s2]]=cc;
        ljb[zh[s1]].push_back(zh[s2]);
    }
    int anss=999999999;
    for(i=1;i<id;i++)
    {
        for(j=1;j<id;j++)
        {
            if(i!=j&&cost[i][j]!=999999999)
            {
                int t=cost[i][j];
                cost[i][j]=0;
                spfa();
                if(dist[zhongdian]<anss) anss=dist[zhongdian];
                cost[i][j]=t;
            }
        }
    }
    printf("%d\n",anss);
    }
    return 0;
}

 

zoj 2027 Travelling Fee

标签:

原文地址:http://www.cnblogs.com/zufezzt/p/4514753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!