Dijkstra

来源:互联网 发布:软件质量控制方法 编辑:程序博客网 时间:2024/05/29 09:58
#include<bits/stdc++.h>using namespace std;#define inf 9999999int n,m;int mapp[210][210],vis[210],dis[210];void Dijkstra(int s){    for(int i=0;i<n;i++){        dis[i]=mapp[s][i];        vis[i]=0;    }    vis[s]=1;    int p,minn;    for(int i=1;i<n;i++){        minn=inf;        for(int j=0;j<n;j++){            if(!vis[j] && dis[j]<minn){                minn=dis[j];                p=j;            }        }        vis[p]=1;        for(int j=0;j<n;j++)            if(!vis[j] && mapp[p][j]+dis[p] < dis[j])                dis[j] =mapp[p][j] +dis[p];    }}int main(){    while(~scanf("%d%d",&n,&m)){        for(int i=0;i<n;i++)            for(int j=0;j<n;j++)                mapp[i][j]=inf;        for(int i=0;i<n;i++)            mapp[i][i]=0;        while(m--){            int a,b,c;            scanf("%d%d%d",&a,&b,&c);            if(c<mapp[a][b])                mapp[a][b]=mapp[b][a]=c;        }        int s,t;        scanf("%d%d",&s,&t);        Dijkstra(s);        if(dis[t]!=inf)            printf("%d\n",dis[t]);        else            printf("-1\n");    }    return 0;}

原创粉丝点击