用回溯法解旅行员收获问题

来源:互联网 发布:selenium python 教程 编辑:程序博客网 时间:2024/06/10 20:44
#include<iostream>#include<cstring>using namespace std;int a[100][100];//用来存储权值int x[100]; //x[i]用来存储第i步遍历的城市int isIn[100];//保存城市是否被加入路径int bestw=100000,cw=0,n;int i,j,k;int bestx[100];void Travel_Backtrack(int t)//用i的话太容易混淆路{    if(t>n){        if(cw<bestw){            for(i=1;i<=n;i++) bestx[i]=x[i];//这个数组的存在是有必要的            bestw=cw;        }        return;    }   else{       for(k=1;k<=n;i++){        if(a[x[t-1]][k]!=-1 && !isIn[k]){//没有被加入到路径中去           isIn[k]=1;           x[t]=k;           cw+=a[x[t-1]][k];           Travel_Backtrack(t+1);           isIn[k]=0;           x[t]=0;           cw-=a[x[t-1]][k];        }       }   }}   int main(void)   {       cin>>n;       for(i=1;i<=n;i++)        for(j=1;j<=n;j++)        cin>>a[i][j];       //选择了第一步       x[1]=1;isIn[1]=1;       Travel_Backtrack(2);       cout<<bestw<<endl;       for(i=1;i<=n;i++) cout<<bestx[i]<<endl;   }
还不是一个完整版的实现
0 0