穷举法应用—售货员

 问题描述:叶卡特琳堡有很多公共汽车,因此也有很多市民当上售票员,如果在所有的市民当中,售票员的人数超过p%而不到Q%,那么叶卡特琳堡有多少公民? 例如,如果p=13,Q=14.1,那么至少有15个公民.

用穷举解决问题

please input the downline P%
15
please input the upline Q%
16.3
the Answer is-->13
Press any key to continue

源程序:

#include <iostream>
using namespace std;

void main()
{
 float p,q;    //所输入的比例
 cout<<"please input the downline P%"<<"/n";
 cin>>p;
 cout<<"please input the upline Q%"<<"/n";
 cin>>q;

 float x(1);
 bool test(true);

 while(test)
 {
  for(float i = 1;i<=x;i++)
  {
   if((i/x)<(p/100))
    continue;
   else if((i/x)>(q/100))
    continue;
   else
   {
    test = false;
    cout<<"the Answer is-->"<<x<<"/n";
   }
  }
  x++;
 }
}

 

旅行售货员问题,又称旅行推销员问题(Traveling Salesman Problem, TSP),是指一个售货员要去若干个城市推销商品,他必须从一个城市出发,经过所有城市后再回到出发城市,而且每个城市只能去一次,且最终完成任务的总距离要最短。 旅行售货员问题是一个经典的组合优化问题,它的解空间非常庞大,因此解决方多样,其中一种常用的方是分支限定。 分支限定是一种穷举法,通过不断分割问题的解空间,排除不可能的解,最终得到问题的最优解。在旅行售货员问题中,分支限定的思路如下: 1. 首先,根据问题的情况确定问题规模,并初始化某些变量,如最短路径长度、当前路径长度等。 2. 然后,选择一个起始城市,并将其标记为已访问。 3. 对于每个未访问的城市,按照某种规则(如距离最近)选择一个城市,并将其标记为已访问。 4. 计算当前路径长度,如果当前路径长度已经大于已知的最短路径长度,则剪枝,回溯到上一步。 5. 如果所有城市都已经访问完毕,并且当前路径长度小于最短路径长度,则更新最短路径长度,保存当前路径。 6. 回溯到上一步,并继续选择下一个未访问的城市。 7. 重复步骤3-6,直到找到所有可能的路径。 8. 最后,从保存的路径中选出最短路径,即为问题的最优解。 分支限定的时间复杂度为O(n!),其中n为城市的数量。由于旅行售货员问题是一个NP困难问题,没有多项式时间的解决方。因此,在实际应用中,往往需要使用一些启发式算或近似算来求解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值