1. 旅行家算法代码 ABCDE 5个点的
我这有递归版的,有兴趣的话自己改下吧。城市多了递归的效率低
Class Cities
  {
  
  privateint[][]cities;//各城市表示为(X,Y)X,Y为0到99之间的值
  
  privateint[]shortestPath;//保存最短路程对应的经历顺序
  
  privateintnum;//保存N(城市个数)
  
  privatelongshortestLength=100000000;//N个城市遍历时可能最大路程
  
  privatelonggetLength(int[]tPath){...}//计算以tPath为经历顺序的路程
  
  publicCities(intn)//构造n个城市的坐标,假设为0到99之间的随机数
  
  {
  
  ...
  
  }
  
  publicint[]getShortestPath()//获得最短路径
  
  {
  
  int[]tempPath=newint[num];
  
  shortestPath=newint[num];
  
  int[]citiesToured=newint[num];//保存第I个城市是否已经经历
  
  intcitiesNum=0;//已经经历城市的个数
  
  for(inti=0;i<num;i++)
  
  citiesToured[i]=0;
  
  goThrough(tempPath,citiesNum,citiesToured);//遍历各城市
  
  for(inti=0;i<num;i++)
  
  tempPath[i]=shortestPath[i];//得到遍历顺序
  
  returntempPath;//返回结果
  
  }
  
  privatevoidgoThrough(int[]tPath,intcNum,int[]cToured)//遍历N个城市
  
  {
  
  if(cNum==0)//无经历城市时,选择第1个城市
  
  {
  
  cNum++;
  
  tPath[0]=0;
  cToured[0]=1;
  
  goThrough(tPath,cNum,cToured);
  
  }
  
  elseif(cNum==num)//各个城市已经经历,结束
  
  {
  
  longtempLength=getLength(tPath);//计算此经历顺序所走的路程
  
  if(tempLength<shortestLength)//比较路程
  
  {
  
  shortestLength=tempLength;//更新最短路程及其经历顺序
  
  for(inti=0;i<num;i++)
  
  shortestPath[i]=tPath[i];
  
  }
  
  }
  
  else
    
  {
    for(inti=0;i<num;i++)
  
  if(cToured[i]!=1)//选择未经历的城市
  
  {
  
  cToured[i]=1;//加入已经历城市
  
  tPath[cNum]=i;
  
  cNum++;//已经历城市个数+1
  
  goThrough(tPath,cNum,cToured);//调用下一层
  
  cToured[i]=0;//恢复本层的状态:
  
  cNum--;//已经历城市及个数
  
  }//Endifinfor(i)
  
  }//Endelse
  
  }
privatelonggetLength(int[]tPath)//以指定顺序计算遍历路程
  
  {
  
  longlength=0;//路程
  
  intnowPoint=0;//当前城市,第一次取0
  
  for(inti=1;i<num;i++)
  
  {
  
  intj=tPath[i];
  
  length+=(long)Math.sqrt((cities[j][0]-cities[nowPoint][0])*(cities[j][0]-cities[nowPoint][0])+(cities[j][1]-cities[nowPoint][1])*(cities[j][1]-cities[nowPoint][1]));//加上当前、下一城市间的距离
  
  nowPoint=j;//更新当前城市
  
  }
  
  length+=(long)Math.sqrt((cities[0][0]-cities[nowPoint][0])*(cities[0][0]-cities[nowPoint][0])+(cities[0][1]-cities[nowPoint][1])*(cities[0][1]-cities[nowPoint][1]));//加上首尾城市间的距离
  
  return length;
  }
  
  }//Cities类定义结束
2. 生命密码分析三角形外面的怎么算
生命密码作为一种娱乐性质的性格预测,可以在闲暇时玩一玩放松身心,而生命密码分析三角形的算法如下:
1、确定阳历出生日,因为生命密码学说来源于西方,而西方只有阳历没有阴历。你的生日包含了你出生时的空间,那一刻,各大行星的运转与你之间存在特殊的磁场。
2、确定阳历生日后,将年月日的每位数字相加,得到的总数如果大于9,则再将数字相加,得出最后一个各位数字(生命密码只有1-9),这个数字就是你的生命密码主性格数啦

(2)旅行家算法扩展阅读:
生命密码各个数字的含义(仅供娱乐)
1、天生的领导人,有本事,喜标新立异,满脑子新点子,总在发掘新事务,比较主观及冲动价值观,是非分明。
2、天生具有敏锐分析及观察的能力,爱批评、擅指正,具男女双重性格,情感丰富,为人温和亲切,天生依赖。
3、聪明、天赋异禀的艺术家,充满理想,立于不败之地。沟通、学习力强,太理想化,不够实际。
4、擅长看穿事情真相,有条理,给人安全感,擅于组织与生产,务实,稳定,可靠,天生缺乏安全感,过于顽固,不喜欢改变。
5、拥有演说与促销的天分,崇尚自由及品味,喜欢新奇。
6、乐于付出及承担,具有丰富的爱心,勇于分担他人困难,敢于面对自己的困难,凡事应量力而为。
7、直觉敏锐,精于研究、调查,寻找事实的真相,能力强。除非百分百的肯定,否则对答案难满意。追求至高无上的真理及精神,多疑,较懒惰。
8、天生领导人,善于开发,资质聪明,独具慧眼,具建设力,相信白手起家,善用投机天分坐拥权力。
9、想象与人道(天使、服务人群)。擅长服务、娱乐,照顾及帮助他人,拥有常人无法想象的能量,与宗教有缘分。
3. C++算法,动态规划法实现TSP问题
c++listmatrixiteratoriostream算法
[cpp] view plainprint?
#include
#include
using namespace std ;
typedef list<</SPAN>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
{
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<<"旅行商问题动态规划算法"<<endl;
cout<<"路线长度的矩阵表示如下 (-1表示无限大)"<<endl;
for(int j=0;j
cout<<endl;
for(int k=0;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;
}
4. 旅行者一号的速度多少是34万公里每秒吗
^解一下呗
将地球绕太阳近似为匀速圆周运动,有
GMm/r^2=F=mv^2/r
其中r为日地距离,八版分钟光程,约权1.5×10的11次方m/s
M为太阳质量,即2×10的30次方kg
G为引力常量,约6×10的负11次方(单位我就不写了)
计算得,地球速度v约30千米每秒,选C 
(还有另一种简单算法)
绕日周期为一年,折合为秒很容易
即T易得,而vT=2πr,也可解得答案为C,很简单
5. 数字的来历
数字的起源有两种说法:
1、数字起源于我国,史书上说中天皇君兄弟十三人,号曰天灵,其中一人发明了数字,继而又发明了天干、地支。发明数字:零、一、二、三、四、五、六、七、八、九、十、廿、卅、卌、百、千、万。
2、亦有另一种说法,数字是发源于古印度,并不是阿拉伯人发明创造的。数字后来被阿拉伯人用于经商而掌握,经改进,并传到了西方。

(5)旅行家算法扩展阅读:
1、阿拉伯数字传入欧洲
十个数字符号后来由阿拉伯人传入欧洲,被欧洲人误称为阿拉伯数字。由于采用计数的十进位法,加上阿拉伯数字本身笔画简单,写起来方便,看起来清楚,特别是用来笔算时,演算很便利。因此随着历史的发展,阿拉伯数字逐渐在各国流行起来,成为世界各国通用的数字。
2、阿拉伯数字传入中国
阿拉伯数字传入我国,大约是13到14世纪。由于我国古代有一种数字叫“算筹”,写起来比较方便,所以阿拉伯数字当时在我国没有得到及时的推广运用。
20世纪初,随着我国对外国数学成就的吸收和引进,阿拉伯数字在我国才开始慢慢使用,阿拉伯数字在我国推广使用才有100多年的历史。阿拉伯数字已成为人们学习、生活和交往中最常用的数字了。
6. matlab蚁群算法旅行者问题中,蚂蚁数目多了,搜索的随机性为什么会减少
明明写的是蚂蚁数量增加,随机性变强了啊,你怎么说是减少了呢。
7. 现在技术能计算出旅行者号的准确位置吗
发个信号个旅行者号再等旅行者号传回信号,把这之间所花的时间除以2再乘以光速就差不多了,旅行者号的轨道是经过精密计算的,不然就不可能超太阳系外的银河中心前进了,用距离再综合一下大概位置是能出来的,虽然不可能很准确的,毕竟它的速度已经到达了第三宇宙速度。
8. 关于算法分析与设计的题目,请各位高高手帮帮忙.小女子感激不尽
数据结构没学好吧。
9. 旅行家的预算
看到题目后,很容易想到递推,但是又不知道具体怎样做。我们可以先分析一下题目,用手工算
几个数据,看能不能受到启发(注意:这是一个很重要的思路!!)
例如可以先分析样例数据(这是理解题意思必须的,因为样例不会错)
算了一下吗?好了,我问你,如果你是司机,你会怎么办呢?
尽量买便宜的,贵的就买“刚刚可以到下一站”?对不对呢?
举出反例很容易,但是我们不能轻易放弃这个思路,可以接着想下去。
不能保证全局最优,我们就试着改进我们的方法。
事实上,要用的油是确定的(D1/D2),价钱最便宜的油的站Q的油显然应该多买,至少:
  到达Q这个油站时汽车剩油不为0的方案一定不是最优的。
这是因为,如果剩下P升油,显然不如当初少买P升,改在Q这里买P升划算!(Q最便宜嘛!)
哈哈,有一点思路了吧!就是把较优解改进为最优解啦!
算法如下:
每次都假装装满油,用的时候先用便宜的,因为把贵的留在后面“反悔”(被替换成更便宜的油)不是更爽吗?!
这样计算费用时只考虑真正使用的,假装装满时就不要再算一次了。你看看程序中是不是只有两处修改了cost?
我很懒,因此就默认油站是按离起点由近及远给出的。
输入后面是先把油费由贵到便宜排序,第i贵的站是place[i],以便选择。
下面的程序中主要部分是那个循环,它做了以下事情:
1)假装装满油:gas[i]:=c-nowp; nowp是现在有的油,gas[i]是车上第i站的油的体积。
2)替换:现有的油如果有比当前站(第i站)贵的,改为i号油:gas[i]:=gas[i]+gas[j]; gas[j]:=0;
3)行驶:依次选择最便宜的油行驶路程distance,就是个循环for j:=n downto 0
经过这样分析,程序是不难写出了,程序长一点,是为了写得更易懂。
基础较好的同学也可以用优先队列(例如用堆来实现)来进行替换和使用油,这里只用了最简单的方法模拟,
效率并不高。
program FenQuPrepare_Day4_Task3_FQ99P3;
type
  real=extended;
const
  fn_in='input.txt';
  maxn=100;
var
  ans,c,d1,d2:real;
  can:boolean;
  n:Integer;
  d:array[0..maxn] of real;
  p:array[0..maxn] of real;
  procere init;
  var s:string;
      i:Integer;
  begin
    assign(input,fn_in);
    reset(input);
    readln(d1,c,d2,p[0],n);
    for i:=1 to n do readln(d[i],p[i]);
  end;
  procere main;
  var cur,i,j:Integer;
      rest,min:real;
  begin
    can:=true;
    for i:=1 to n do
      if (d[i]-d[i-1])>c*d2 then can:=false;
    if d1-d[n]>c*d2 then can:=false;
    if not can then exit;
    rest:=0;
    ans:=0;
    for cur:=0 to n do
    begin
      min:=1e10;
      i:=cur;
      while (i<=n) and ((d[i]-d[cur])<=c*d2) do
      begin
        if p[i]<min then
        begin
          min:=p[i];
          j:=i;
        end;
        inc(i);
      end;
      if j=cur then
      begin
        if c*d2>(d1-d[cur]) then
        begin
          if rest*d2<d1-d[cur] then
          begin
            ans:=ans+p[cur]*((d1-d[cur])/d2-rest);
            rest:=(d1-d[cur])/d2;
          end;
        end else
        begin
          ans:=ans+p[cur]*(c-rest);
          rest:=c;
        end
      end else
      begin
        if rest*d2<d[j]-d[cur] then
        begin
          ans:=ans+p[cur]*((d[j]-d[cur])/d2-rest);
          rest:=(d[j]-d[cur])/d2;
        end;
      end;
      rest:=rest-(d[cur+1]-d[cur])/d2;
    end;
  end;
  procere out;
  begin
    if can then
    begin
      ans:=round(ans*100)/100;
      writeln(ans:0:2);
    end else writeln('No solution');
  end;
  begin
    init;
    main;
    out;
  end.
10. NOIP1999 提高组 旅行家的预算 dp最后一个测试点老是过不了
抱歉,你用的动态规划的算法不正确。
因为我从你的代码里发现,每到一个加油站,你只考虑了两种选择选择加油(并且正好保证能开到今后遇到的某一个加油站)或者不加油。请问,我这样理解对不对?如果我没有说错的话,你这个思路就有问题了。
我把你的代码改成了贪心算法,在oj上通过了。
#include<stdio.h>
#defineMAX12000
intmain()
{
doubled1,c,d2,p0,d[MAX]={0},p[MAX]={0},m,f[MAX],s[MAX],fa,ft,sa;
intn,i,j,b,t;
scanf("%lf%lf%lf%lf%d",&d1,&c,&d2,&p0,&n);
d[n+1]=d1;
p[0]=p0;
for(i=1;i<=n;i++)
{
scanf("%lf%lf",&d[i],&p[i]);
}
m=0;
b=0;
t=0;
for(i=0;i<=n;i++)
{
sa=0;
fa=0;
ft=(d[i+1]-d[i])/d2;
if(ft>c)
{
printf("NoSolution ");
return0;
}
while(b<t)
{
if(p[i]<=s[t-1])
t--;
else
break;
}
while(b<t&&fa<ft)
{
fa+=f[b];
sa+=f[b]*s[b];
b++;
}
if(fa<ft)
{
sa+=(ft-fa)*p[i];
}
elseif(fa>ft)
{
b--;
f[b]=fa-ft;
sa-=f[b]*s[b];
}
m+=sa;
if(ft<c)
{
f[t]=c-ft;
s[t]=p[i];
t++;
}
}
printf("%.2lf ",m);
return0;
}