摘要

题目链接 难度等级 完成状态 完成分数 最后编辑时间 需要注意
回家 ★☆☆☆☆ 答案正确 100 2015-7-20 19:13:12

代码

1079.cpp代码已折叠
展开折叠内容
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<set>
#include<queue>
#include<cstring>
#include<climits>
#include<cmath>
using  namespace std;
#define lld long long
queue<char> p;
vector< pair<char,int> > L[256]={};
int Dis[256]={};
#define foreach(i,a) for(typeof(a.begin()) i=a.begin();i!=a.end();++i)
int main(){
    int n;
    cin>>n;
    memset(Dis,7,sizeof(Dis));//设置初值为很大的值//
    int Ans=INT_MAX;char Ansc;
    for(int i=1;i<=n;++i)
    {
        char f,t;int d;
        cin>>f>>t>>d;
        //新建路径//
        L[f].push_back( make_pair(t,d) );
        L[t].push_back( make_pair(f,d) );
    }
    p.push('Z');
    Dis['Z']=0;
    //SPFA//
    while(!p.empty())//队列非空//
    {
        foreach(i,L[p.front()])//遍历//
        {
            if(Dis[p.front()]+i->second<Dis[i->first])//判断Dis是否更优//
            {
                Dis[i->first]=Dis[p.front()]+i->second;//更新目标点并入队//
                p.push(i->first);
                if(isupper(i->first))//统计Ans//
                {
                    if(Dis[i->first]<Ans)
                    {
                        Ans=Dis[i->first];
                        Ansc=i->first;
                    }
                }
            }
        }
        p.pop();
    }
    cout<<Ansc<<" "<<Ans;
}

著作权声明[编辑]

关于[编辑]