巨水的题目

//  今天翻了翻以前收藏的东西,居然发现

:  spfa  用map  写的 ,好吧,stl  我一无所知。

题目:hdu  2544   太熟悉了吧

#include<stdio.h>

#include <map>

#include <queue>

#define N 101

using namespace std;



map<int,int>  head[N];// head[u][v]=w

int  spfa(int st,int n)  //start

{

    int i,u,v,w;

    int vis[N],d[N];

    for (i=1;i<=n;i++)

    {vis[i]=0;d[i]=0x7ffffff;}

    vis[st]=1; d[st]=0;



    queue<int> q; q.push(st);

    while(!q.empty())

    {

        u=q.front();

        vis[u]=0; q.pop();

        for (map<int,int>::iterator it=head[u].begin();it!=head[u].end();it++)

        {

            v=it->first;  w=it->second;

            if (d[u]+w<d[v])

            {

                d[v]=d[u]+w;

                q.push(v);vis[v]=1;

            }

        }

    }

    return d[n];

}

int main()

{

    int n,m;





    while(scanf("%d%d",&n,&m),n+m)

    {

        int i,u,v,w;

        for (i=0;i<m;i++)

        {

            scanf("%d%d%d",&u,&v,&w);

            head[u][v]=head[v][u]=w;

        }

        printf("%d\n", spfa(1,n));

        for (i=0;i<n;i++)  head[i].clear();

    }

    return 0;

}

你可能感兴趣的:(巨水的题目)