#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;
}
dijkstra算法
最新推荐文章于 2024-06-05 15:07:18 发布