>n;for(i=0;ifor(j=0;jG[i][j]=M;for(i=0;i{fin>>m;for(j=0;j{fin>>k>>l;G[" />

运筹学最短路径(C++代码)

#include
#include
#define M 99999
int main()
{
int G[100][100];
int n;
int p[100],flag[100],s[100];
int cur;
int m,k,l,i,j;
ifstream fin("in.txt");
//enter
fin>>n;
for(i=0;ifor(j=0;jG[i][j]=M;
for(i=0;i{
fin>>m;
for(j=0;j{
fin>>k>>l;
G[i][k-1]=l;
}
}
for(i=0;i{
flag[i]=0;
s[i]=M;
}
cur=0;
flag[cur]=1;
s[cur]=0;
p[cur]=0;
for(i=1;i{
for(j=0;j{
if(flag[j]==0)
{
m=s[cur]+G[cur][j];
if(m{
s[j]=m;
p[j]=cur;
}
}
}
m=M;
for(j=0;j{
if(flag[j]==0)
{
if(s[j]{
m=s[j];
cur=j;
}
}
}
flag[cur]=1;
if(s[cur]==M)
{
//continue;
p[cur]=0;
for(j=0;jif(flag[j]==0)
{
s[j]=M;
p[j]=0;
flag[j]=1;
}
break;
}
}
ofstream fout("out.txt");
for(i=1;i{
if(s[i]==M)
{
cout<<"从第1个点到第"<fout<<"从第1个点到第"<}
else
{
cout<<"从第1个点到第"<cout<<"路径为:"<fout<<"从第1个点到第"<fout<<"路径为:"<k=p[i];
cout<<" <-"<fout<<" <-"<while(k!=0)
{
k=p[k];
cout<<" <-"<fout<<" <-"<}
}
cout<fout<}
return 0;
}

相关文档
最新文档