dijkstra算法

来源:互联网 发布:网络花店创业计划书 编辑:程序博客网 时间:2024/04/30 01:09
#include<string.h>#include<stdio.h>#include<stdlib.h>#include<algorithm>using namespace std;const int maxn=1e9;int mp[100][100],dis[100],vis[100],n,m;void dijkstra(int s){    for(int i=1; i<=n; i++)    {        vis[i]=0;        dis[i]=mp[1][i];    }    vis[s]=1;    dis[s]=0;    for(int i=1; i<=n; i++)    {        int to=-1;        int mini=maxn;        for(int  j=1; j<=n; j++)        {            if(!vis[j]&&dis[j]<mini)            {                to=j;                mini=dis[j];            }        }        vis[to]=0;        for(int j=1; j<=n; j++)        {            if(!vis[j])                dis[j]=min(dis[j],dis[to]+mp[to][j]);        }    }}int main(){    while(~scanf("%d%d",&n,&m))    {        for(int i=1; i<=n; i++)        {            for(int j=1; j<=n; j++)            {                if(i!=j)                    mp[i][j]=maxn;                else                    mp[i][j]=0;            }        }        for(int i=1; i<=m; i++)        {            int a,b,c;            scanf("%d%d%d",&a,&b,&c);            mp[a][b]=c;        }        dijkstra(1);        for(int i=2;i<=n;i++)        {            printf("%d %d\n",i,dis[i]);        }    }    return 0;}

0 0