搞了一晚上,和最短生成树差不多,用的迪杰斯特拉算法。超简单一看就会!
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define INF 0x3f3f3f3f
int distance[101][101];
int vis[100];
int parent[100];
int c[101];
int n,m;
int min;
void f()
{
int i,j;
for(i=1; i<=n; i++)
{
c[i]=distance[1][i];
}
vis[1]=1;
for(i=1; i<n; i++)
{
int p=0;
min=INF;
for(j=1; j<n; j++)
{
if(!vis[j]&&c[j]<min)
{
min=c[j];
p=j;
}
}
vis[p]=1;
for(j=1; j<=n; j++)
{
if(!vis[j]&&c[j]>c[p]+distance[p][j]) //1 2 + 2 3的距离=1 3的距离!
{
c[j]=c[p]+distance[p][j];
parent[i]=p;
}
}
}
}
int main()
{
while (~scanf("%d %d",&n,&m))
{
if(n==1)
{
printf("0\n");
continue ;
}
memset(distance,INF,sizeof (distance));
memset(vis,0,sizeof vis);
memset(parent,0,sizeof parent);
int u,v,l;
int i;
for( i=1; i<=m; i++)
{
scanf("%d %d %d",&u,&v,&l);
if(distance[u][v]>l)
distance[u][v]=distance[v][u]=l;
}
f();
printf("%d\n",c[n]);
}
return 0;
}
/***************************************************
User name: sm180216刘志鹏
Result: Accepted
Take time: 16ms
Take Memory: 200KB
Submit time: 2019-07-30 21:22:45
****************************************************/
最小生成树是到树的距离,最短路径是n到1的距离!最后直接输出a【n】!