最短路A - Til the Cows Come Home

 题意:求从1到n的最短路距离

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>

using namespace std;

#define maxn 2005

int head[maxn];
int cnt;
int visit[maxn];
int dist[maxn];
const int oo=0x3f3f3f3f;
struct node
{
    int u,v,next,w;
}e[maxn];

void Init(int Start,int End)
{
    for(int i=Start;i<=End;i++)
        dist[i]=oo;
    memset(head,-1,sizeof(head));
    for(int i=Start;i<=End;i++)
        e[i].next=-1;
}

void add(int u,int v,int w)
{
    e[cnt].u=u;
    e[cnt].v=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt++;
}

int Spfa(int Start,int End)
{
    stack<int>sta;
    dist[Start]=0;
    sta.push(Start);
    memset(visit,0,sizeof(visit));
    while(sta.size())
    {
        int s=sta.top();
        sta.pop();
        visit[s]=0;
        for(int i=head[s];i!=-1;i=e[i].next)
        {
            int u=e[i].u;
            int v=e[i].v;
            int w=e[i].w;
            if(dist[u]+w<dist[v])
            {
                dist[v]=dist[u]+w;
                if(visit[v]==0)
                {
                    visit[v]=1;
                    sta.push(v);
                }
            }
        }
    }
    return dist[End];
}

int main()
{
    int t,n;
    while(~scanf("%d",&t))
    {
        scanf("%d",&n);
        Init(1,n);
        int u,v,w;
        for(int i=1;i<=t;i++)
        {
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);
            add(v,u,w);//由于未添加这个边,错啦n多次。
        }
        int ans=Spfa(1,n);
        printf("%d\n",ans);
    }
    return 0;
}

 

posted @ 2015-09-26 10:26  梦中。。  阅读(170)  评论(0编辑  收藏  举报