dijkstra 求助啊
#include<stdio.h>
#include<string.h>
#define FI 100000
int final[100];
int g[100][100];
int d[100];
int n,m;
int start,end;
void dijkstra()
{
int i,w,v,min,a;
memset(final,0,sizeof(final));
for(i=0;i<n;i++)
d[i]=g[start][i];
final[start]=1;
d[i]=0;
for(v=0;v<n;v++)//什么意思
{
min=FI;
for(w=0;w<n;w++)
if(!final[w]&&d[w]<min)//的【v】是上面for中的d【】吗
{
a=w;
min=d[w];
}
final[a]=1;
for(w=0;w<n;w++)
if(!final[a]&&d[a]+g[a][w]<d[w])//还有这个d
d[w]=d[a]+g[a][w];
}
if(d[end]<FI)
printf("%d",d[end]);
else
printf("-1");
}
int main()
{
int i,j,x,y,z;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
g[i][j]=FI;
for(i=0;i<m;i++)
scanf("%d%d%d",&x,&y,&z);
g[x][y]=g[y][x]=z;
scanf("%d%d",&start,&end);
dijkstra();
}
return 0;
}
[解决办法]
从另外一个集合里找到一个离当前集合里最近的点。