这是图论里面的一部分内容,给你个图,让你求 源点 到其他点的最小值。
最短路径的一种
具体的思想是,假如要找从v0到那个点距离最短,一定是一步就可以到达的。之后在找距离最短的一定是一步到达,或者到上次找到的距离最短的点 v,再由v到达的那个点,循环n-1次。
#include <iostream>
#include <string>
using namespace std;
int edge[100][100];
int v,a;
int s,e;
int vex[10005];
int d1[10005];
string p1[10005];
int Min(int d[],int v)
{
int m=99999;
int m1;
for(int i=0;i<v;i++)
{
if(d[i]!=0&&m>d[i])
{
m=d[i];
m1=i;
}
}
return m1;
}
void dijkstra(int s,int e,string vex[])
{
int i,k,num,d[10005];
string p[10005];
for(int i=0;i<v;i++)
{
d[i]=edge[s][i];
if(d[i]!=999)
p[i]=vex[s]+" "+vex[i];
else
p[i]="";
}
for(int num=1;num<v;num++)
{
k=Min(d,v);
for(i=0;i<v;i++)
{
if(d[i]>d[k]+edge[k][i])
{
d[i]=d[k]+edge[k][i];
p[i]=p[k]+" "+vex[i];
}
}
if(k==e)
{
if(p[k]!="")
{
cout<<d[k]<<endl;
cout<<p[k];
}
else
cout<<"no answer";
}
d[k]=0;
}
}
int main()
{
cin>>v>>a;
cin>>s>>e;
string vexx[1005]={"v0","v1","v2","v3","v4","v5","v6","v7","v8"};
for(int i=0;i<v;i++)
{
for(int j=0;j<v;j++)
{
edge[i][j]=999;
if(i==j)
{
edge[i][j]=0;
}
}
}
while(a--)
{
int v1,v2,q;
cin>>v1>>v2>>q;
edge[v1][v2]=q;
}
dijkstra(s,e,vexx);
}