发现好多算法都不会写了。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define max 10000000
int m,n;
int dis[205][205];
int s,t;
void init(int ars[][205])
{
int i ,j;
for(i=0;i<202;i++)
for(j=0;j<202;j++)
{
if(i!=j)
dis[i][j]=max;
}
}
void dijkstra(int ars[][205],int m,int s)
{
int final[205]={0}; //当其值为1时表示最近点从源点到此点最近已经找到
int x,min;
int i,j;
final[s]=1;
for(i=0;i<m;i++)
{
min=max;
for(j=0;j<m;j++)
{
if(!final[j]&&ars[s][j]<min) //从所有没有最短路径的点中找到一个最短的
{
min=ars[s][j];
x=j;
}
}
final[x]=1;
for(j=0;j<m;j++)
dis[j][s]=dis[s][j]=dis[s][j]<(dis[s][x]+dis[x][j])?dis[s][j]:dis[s][x]+dis[x][j];
} //以刚找到的点从中间点做一次松驰
}
int main()
{
int i ;
int x,y,a;
while(scanf("%d %d",&m,&n)!=EOF)
{
memset(dis,0,sizeof(dis));
init(dis);
for(i=0;i<n;i++)
{
scanf("%d %d %d",&x,&y,&a);
dis[y][x]=dis[y][x]<a?dis[x][y]:a;
dis[x][y]=dis[y][x];
}
scanf("%d %d",&s,&t);
dijkstra(dis,m,s);
if(dis[s][t]==max)
printf("-1\n");
else
printf("%d\n",dis[s][t]);
}
return 0;
}