给定一个N M分别表示点的个数,边的条数,然后定一个S表示开始的位置
6 8 0
下面的8个输入分别表示两个点之间的距离,比如0 1 1,表示0点到1点距离为1
0 1 1
0 3 4
0 4 4
1 3 2
2 5 1
3 2 2
3 4 3
4 5 3
下面给出实现的模板
#include <iostream>
#include <algorithm>
#define MAXN 100
#define INF 1000000
using namespace std;
int n,s;
int G[MAXN][MAXN];
int d[MAXN];
bool vis[MAXN]={false};
int pre[MAXN];
void dijkstra(int s)
{
fill(d,d+MAXN,INF);
d[s]=0;
for(int i=0;i<n;i++)
pre[i]=i;
for(int i=0;i<n;i++)
{
int u=-1,MIN=INF;
for(int j=0;j<n;j++)
{
if(!vis[j]&&d[j]<MIN)
{
u=j;
MIN=d[i];
}
}
if(u==-1) return ;
vis[u]=true;
for(int v=0;v<n;v++)
{
if(!vis[v]&&G[u][v]!=INF&&G[u][v]+d[u]<d[v])
{
d[v]=d[u]+G[u][v];
pre[v]=u;
}
}
}
}
int main()
{
int u,v,m,x;
scanf("%d %d %d",&n,&m,&s);
fill(G[0],G[0]+MAXN*MAXN,INF);
for(int i=0;i<m;i++)
{
scanf("%d %d %d",&u,&v,&x);
G[u][v]=x;
}
dijkstra(0);
for(int i=0;i<n;i++)
printf("%d ",d[i]);
printf("\n");
return 0;
}