您的位置:首页 > 其它

旅行售货员问题1

2012-06-08 07:06 288 查看
# include <iostream.h>

/*

利用全排列解决旅行售货员问题(最短路程或最少旅费)

*/

int cost[5][5]={{0,0,0,0,0},{0,0,30,6,4},{0,30,0,5,10,},{0,6,5,0,20},{0,4,10,20,0}};

double bestc = 9999;

int Num = 0;

int i;

template <typename T>

void Perm(T list[],int k,int m)

{

if(k==m)

{

Num++;

cout<<"路线"<<Num<<":";

for(i=0;i<=m+1;i++)

{

cout<<list[i]<<" ";

}

cout<<"费用"<<":";

double cc = 0;

for(i=0;i<=m;i++)

{

cc+=cost[list[i]][list[i+1]];

}

cout<<cc<<endl;

if(cc<bestc)

bestc=cc;

cout<<endl;

}

else

for(int i=k;i<=m;i++)

{

Swap(list[k],list[i]);

Perm(list,k+1,m);

Swap(list[k],list[i]);

}

}

template <typename T>

inline void Swap(T &a,T &b)

{

T temp = a; a = b;b=temp;

}

void main()

{

int list[5] = {1,2,3,4,1};

Perm(list,1,3);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: