//6-7 解决旅行商问题的递归调用算法
const int Max=1000;
int n;//城市个数
double dist[Max][Max];//保存两城间距的数组
//path:城市个数
//visited:对各城市访问与否
//currentLendth:所有已检索路径的长度
//在访问所有剩余城市的路径的中。返回最短路径
double shortesPath(vector<int> path,vector<bool> visited,double currentLength){
//初始部分:所有城市都已访问完毕,则返回到起始城市并终止运算
if(path.size()==n)
return currentLength+dist[path[0]][path.back()];
double ret=INT_MAX;//以极大值初始化
for(int next=0;next<n;next++){
if(visited[next])continue;
int here=path.back();
path.push_back(next);
visited[next]=true;
//利用递归调用完成剩余路径的检索,并得出最短的路径的长度
double cand = shortesPath(path, visited, currentLength+dist[here][next]);
ret=min(ret,cand);
visited[next]=false;
path.pop_back();
}
return ret;
}