哪位大侠帮小弟看看程序吧····
这是旅行售货员问题的代码,我有很多地方都看不明白,有没有哪位大侠帮忙写一下注释啊?小弟在这里谢谢了···
# include <iostream>
using namespace std;
const int NoEdge=-1;
const int MAX=20;
int G[MAX][MAX];
int ans[MAX],x[MAX];
int bestc,cc;
void init(int n)
{
int i,j,len;
memset(G,NoEdge,sizeof(G));
while( cin>>i>>j )
{
if( i==0 && j==0 ) break;
cin>>len;
G[i][j]=len;
G[j][i]=len;
}
for(i=1;i<=n;i++) x[i]=i;
bestc=INT_MAX; //0x7fffffff;
cc=0;
}
void Swap( int& i,int& j)
{
int t=i;
i=j;
j=t;
}
void Traveling(int i,int n)
{
int j;
if(i==n+1)
{
if(G[ x[n-1] ][ x[n] ] != NoEdge && G[ x[n] ][1] != NoEdge &&
(cc + G[ x[n] ][1] < bestc ) )
{
for(j=1;j<=n;j++) ans[j] = x[j];
bestc = cc + G[ x[n] ][ 1 ];
}
}
else
{
for(j=i;j<=n;j++)
{
if( G[ x[i-1] ][ x[j] ] != NoEdge && (cc + G[ x[i-1] ][ x[j] ] < bestc) )
{
Swap( x[i],x[j] );
cc += G[ x[i-1] ][ x[i] ];
Traveling(i+1,n);
cc -= G[ x[i-1] ][ x[i] ];
Swap( x[i],x[j] );
}
}
}
}
void print(int n)
{
cout<<"最小的旅行费用为:"<<bestc<<endl;
cout<<"最佳路径是:";
for(int i=1;i<=n;i++)
cout<<ans[i]<<"->";
cout<<ans[1]<<endl;
}
int main()
{
int n;
while( cin>>n&&n )
{
init(n);
Traveling(2,n);
print(n);
}
return 1;
}