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

HDU2112-HDU Today-最短路(dijkstra+字符转换)

时间:2015-08-30 13:00:08      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:hdu2112   最短路   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112

这个题目有点坑,就是有可能起点和终点在同一个地方,所以得保存起点和终点;

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<set>
#include<vector>
#include<algorithm>
#define LL long long
#define inf 1<<29
#define s(a) scanf("%d",&a)
#define CL(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=155;
int n,m,a,b,cnt;
int Map[N][N];
int dist[N];
bool vis[N];
string s,e,s1,e1;
void dijkstra()
{
    CL(vis,false);
    for(int i=1;i<cnt;i++) dist[i]=Map[1][i];
    vis[1]=true;
    while(1){
        int v=-1;
        for(int u=1;u<cnt;u++)
            if(!vis[u]&&(v==-1||dist[u]<dist[v])) v=u;
        if(v==-1) break;
        vis[v]=true;
        for(int u=1;u<cnt;u++)
            dist[u]=min(dist[u],dist[v]+Map[v][u]);
    }
}
int main()
{
    cin.sync_with_stdio(false);
    while(cin>>n){
        if(n==-1) break;
        cin>>s1>>e1;
        map<string,int>m;
        m[s1]=1;m[e1]=2;
        cnt=3;
        for(int i=1;i<=150;i++){
            for(int j=1;j<=150;j++)
                Map[i][j]=Map[j][i]=inf;
            Map[i][i]=0;
        }
        int t;
        while(n--){
            cin>>s>>e>>t;
            if(!m[s]) m[s]=cnt++;
            if(!m[e]) m[e]=cnt++;
            if(Map[m[s]][m[e]]>t)
                Map[m[s]][m[e]]=Map[m[e]][m[s]]=t;
        }
        if(s1==e1){
            cout<<0<<endl;
            continue;
        }
        dijkstra();
        if(dist[2]<inf) cout<<dist[2]<<endl;
        else cout<<"-1"<<endl;
    }
    return 0;
}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU2112-HDU Today-最短路(dijkstra+字符转换)

标签:hdu2112   最短路   

原文地址:http://blog.csdn.net/wlxsq/article/details/48103239

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