标题:哪位大侠帮小弟看看程序吧····
只看楼主
劇終の後
Rank: 1
等 级:新手上路
帖 子:6
专家分:6
注 册:2010-12-31
结帖率:50%
已结贴  问题点数:20 回复次数:2 
哪位大侠帮小弟看看程序吧····
这是旅行售货员问题的代码,我有很多地方都看不明白,有没有哪位大侠帮忙写一下注释啊?
小弟在这里谢谢了···
# 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;
}
搜索更多相关主题的帖子: 售货员 地方 
2010-12-31 15:35
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:7 
这好像是图  我也有点看不懂  

                                         
===========深入<----------------->浅出============
2010-12-31 21:16
无思无谋
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:4
专家分:16
注 册:2010-12-29
得分:7 
路过

树欲静风不止
子欲养亲不在
2010-12-31 21:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-330355-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.784610 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved