什么是商旅问题啊?用c语言设计,是关于图的程序。最好能给出代码
答案:2 悬赏:0 手机版
解决时间 2021-03-14 03:22
- 提问者网友:捧腹剧
- 2021-03-13 14:15
什么是商旅问题啊?用c语言设计,是关于图的程序。最好能给出代码
最佳答案
- 五星知识达人网友:野慌
- 2021-03-13 15:33
旅行商问题(Traveling Saleman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。字面上的理解是:有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。
解决TSP问题的思想有回溯法、贪心法、动态规划法等。
如果动态规划法解决TSP问题,可以参考程序代码:
#include
解决TSP问题的思想有回溯法、贪心法、动态规划法等。
如果动态规划法解决TSP问题,可以参考程序代码:
#include
#include
using namespace std ;
typedef list
LISTINT listAnother;
LISTINT list_result;
int d[4][4]={{-1,3,6,7},{2,-1,8,6},{7,3,-1,5,},{7,3,7,-1}};
int matrix_length=4;
int getPath(int n,LISTINT list_org)
{
LISTINT::iterator i;
int minValue;
if(n==1)
{
i=list_org.begin();
minValue= d[*i-1][0];
if(list_org.size()==matrix_length-1)
{
list_result=list_org;
}
}
else
{
int temp;
i=list_org.begin();
temp=*i;
list_org.erase(i);
i=list_org.begin();
minValue=d[temp-1][*(i)-1]+getPath(n-1,list_org);
if(list_org.size()==matrix_length-1)
{
list_result=list_org;
}
for(int j=2;j
i=list_org.begin();
for(int k=1;k
i++;
}
int tempvalue=*i;
list_org.erase(i);
list_org.push_front(tempvalue);
i=list_org.begin();
tempvalue=d[temp-1][*(i)-1]+getPath(n-1,list_org);
if(tempvalue
if(list_org.size()==matrix_length-1)
{
list_result=list_org;
}
minValue=tempvalue;
}
}
}
return minValue;
}
int main(int argc, char* argv[])
{
LISTINT list_org;
LISTINT::iterator h;
list_org.push_front(4);
list_org.push_front(3);
list_org.push_front(2);
list_org.push_front(1);
cout<<"旅行商问题动态规划算法"<
}
cout<
cout<<"计算结果:"<
list_result.push_back(1);
cout<<"要走的路径:---->:";
for (h = list_result.begin(); h != list_result.end(); ++h)
cout << *h << " ";
cout << endl;
int i;
cin>>i;
return 0;
}
全部回答
- 1楼网友:狂恋
- 2021-03-13 16:20
旅行商问题(traveling saleman problem,tsp)又译为旅行推销员问题、货郎担问题,简称为tsp问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。字面上的理解是:有一个推销员,要到n个城市推销商品,他要找出一个包含所有n个城市的具有最短路程的环路。
解决tsp问题的思想有回溯法、贪心法、动态规划法等。
如果动态规划法解决tsp问题,可以参考程序代码:
#include <list>
#include <iostream>
using namespace std ;
typedef list<int> listint;
listint listanother;
listint list_result;
int d[4][4]={{-1,3,6,7},{2,-1,8,6},{7,3,-1,5,},{7,3,7,-1}};
int matrix_length=4;
int getpath(int n,listint list_org)
{
listint::iterator i;
int minvalue;
if(n==1)
{
i=list_org.begin();
minvalue= d[*i-1][0];
if(list_org.size()==matrix_length-1)
{
list_result=list_org;
}
}
else
{
int temp;
i=list_org.begin();
temp=*i;
list_org.erase(i);
i=list_org.begin();
minvalue=d[temp-1][*(i)-1]+getpath(n-1,list_org);
if(list_org.size()==matrix_length-1)
{
list_result=list_org;
}
for(int j=2;j<n;j++)
{
i=list_org.begin();
for(int k=1;k<j;k++)
{
i++;
}
int tempvalue=*i;
list_org.erase(i);
list_org.push_front(tempvalue);
i=list_org.begin();
tempvalue=d[temp-1][*(i)-1]+getpath(n-1,list_org);
if(tempvalue<minvalue)
{
if(list_org.size()==matrix_length-1)
{
list_result=list_org;
}
minvalue=tempvalue;
}
}
}
return minvalue;
}
int main(int argc, char* argv[])
{
listint list_org;
listint::iterator h;
list_org.push_front(4);
list_org.push_front(3);
list_org.push_front(2);
list_org.push_front(1);
cout<<"旅行商问题动态规划算法"<<endl;
cout<<"路线长度的矩阵表示如下 (-1表示无限大)"<<endl;
for(int j=0;j<matrix_length;j++){
cout<<endl;
for(int k=0;k<matrix_length;k++){
cout<<" "<<d[j][k];
}
}
cout<<endl;
cout<<"计算结果:"<<getpath(4,list_org)<<endl;
list_result.push_front(1);
list_result.push_back(1);
cout<<"要走的路径:---->:";
for (h = list_result.begin(); h != list_result.end(); ++h)
cout << *h << " ";
cout << endl;
int i;
cin>>i;
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯