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

最短路A - Til the Cows Come Home

时间:2015-09-26 11:46:20      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

 题意:求从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;
}

 

最短路A - Til the Cows Come Home

标签:

原文地址:http://www.cnblogs.com/mengzhong/p/4840367.html

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