某推销员要从城市v1 出发,访问其它城市v2,v3,…,v6 各一次且仅一次,最后返回v1。D
为各城市间的距离矩阵。
问:该推销员应如何选择路线,才能使总的行程最短?
以下是用动态规划方法,Linux下g++编译通过
#include
<
iostream
>
#include
<
set
>
#include
<
vector
>

#define
MAX 6

using
namespace
std;


int
dis[MAX][MAX]
=
...
{
0, 10, 20, 30, 40, 50,
12, 0 ,18, 30, 25, 21,
23, 19, 0, 5, 10, 15,
34, 32, 4, 0, 8, 16,
45, 27, 11,10, 0, 18,
56, 22, 16,20, 12, 0
}
;

typedef
struct

...
{
int curcity;//当前所在的城市
vector<int> unvisited;//当前未访问的城市
set<int> type;//由于set自动排序,相同状态的vector可能不同,但set必然相同
int distance;//从当前城市到终点回到起点的距离
}
status;


/**/
/*测试用*/
void
printVec( vector
<
status
>
vec)

...
{
vector<status>::iterator iter;
vector<int>::iterator it;
for(iter=vec.begin();iter!=vec.end();iter++)

...{
cout<<(
为各城市间的距离矩阵。
问:该推销员应如何选择路线,才能使总的行程最短?
以下是用动态规划方法,Linux下g++编译通过
#include
<
iostream
>
#include
<
set
>
#include
<
vector
>

#define
MAX 6

using
namespace
std;

int
dis[MAX][MAX]
=
...
{
0, 10, 20, 30, 40, 50,
12, 0 ,18, 30, 25, 21,
23, 19, 0, 5, 10, 15,
34, 32, 4, 0, 8, 16,
45, 27, 11,10, 0, 18,
56, 22, 16,20, 12, 0
}
;
typedef
struct

...
{
int curcity;//当前所在的城市
vector<int> unvisited;//当前未访问的城市
set<int> type;//由于set自动排序,相同状态的vector可能不同,但set必然相同
int distance;//从当前城市到终点回到起点的距离
}
status;

/**/
/*测试用*/
void
printVec( vector
<
status
>
vec)
...
{
vector<status>::iterator iter;
vector<int>::iterator it;
for(iter=vec.begin();iter!=vec.end();iter++)
...{
cout<<(

本文通过动态规划方法展示了如何解决旅行商问题,虽然这种方法因空间和时间复杂度较高而不理想。通过示例,详细解释了动态规划模型的构造过程,并给出了一个五城市的实例解题步骤。
最低0.47元/天 解锁文章
2168





