HDU 1874 畅通工程续

来源:互联网 发布:apache插件 编辑:程序博客网 时间:2024/06/07 20:55

转载请注明出处:http://blog.csdn.net/a1dark

分析:一道最短路的水题、用dijkstra水过。。。

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define N 250#define INF 0x7fffffffint mpt[N][N];int dist[N];int vis[N];int m,n;void dijkstra(int x){    memset(vis,0,sizeof(vis));    for(int i=0;i<n;i++)        dist[i]=mpt[x][i];    vis[x]=1;    dist[x]=0;    for(int i=0;i<n-1;i++){        int mink=INF,v;        for(int j=0;j<n;j++){            if(vis[j]==0&&dist[j]<mink){                mink=dist[j];                v=j;            }        }        vis[v]=1;        for(int j=0;j<n;j++){            if(vis[j]==0&&mpt[v][j]!=INF&&mpt[v][j]+dist[v]<dist[j])                dist[j]=mpt[v][j]+dist[v];        }    }}void init(){    for(int i=0;i<N;i++)        for(int j=0;j<N;j++)        {            if(i==j)mpt[i][j]=0;            else mpt[i][j]=INF;        }}int main(){    while(scanf("%d%d",&n,&m)!=EOF){        init();        int s,e,v;        for(int i=1;i<=m;i++){            scanf("%d%d%d",&s,&e,&v);            if(v<mpt[s][e]){                mpt[s][e]=v;                mpt[e][s]=v;            }        }        int start,end;        scanf("%d%d",&start,&end);        dijkstra(start);        if(dist[end]!=INF)            printf("%d\n",dist[end]);        else            printf("-1\n");    }    return 0;}


原创粉丝点击