最小哈密顿回路

来源:互联网 发布:播放器软件下载 编辑:程序博客网 时间:2024/06/09 21:07

老杨留的作业,折腾几个小时加上参考别人的终于写出来了,还是很弱啊。效率貌似还可以,强化了分支定界的条件之后计算N=20的情况只需要十几秒。好好体会一下~

#include #include #include #include using namespace std;#define N 15int curLightestWeight = 1000000;int curDepth = 0;int curWeight = 0;int depth;int curCircle[N],bestCircle[N];bool used[N];int p[N][N];void update();void show();void genGraphic(int maxWeight){for(int i = 0;i < N;i++){for(int j = 0;j < N;j++){if(i == j)p[i][j] = 0;elsep[i][j] = rand()%maxWeight + 1;}}for(int i = 0;i < N;i++){for(int j = 0;j < N;j++){cout<<<"   ";  }  cout<= curLightestWeight){curDepth--;used[curVertex] = false;return;}else if(curDepth == depth){int thisWeight = p[curVertex][0];curWeight += thisWeight;if(curWeight < curLightestWeight){curLightestWeight = curWeight;update();}curDepth--;used[curVertex] = false;curWeight -= thisWeight;return;} else{for(int i = 0;i < N;i++){if(i == curVertex || used[i] == true)continue;int thisWeight = p[curVertex][i];curWeight += thisWeight;MHC_recursion(i);curWeight -= thisWeight; }  }used[curVertex] = false;curDepth--;return;}void update(){for(int i = 0;i < N;i++)bestCircle[i] = curCircle[i];}void show(){for(int i = 0;i < N;i++)cout<<<"-->";cout<<<<"The weight of the circle is "<<<"."<