散分啦。。。
#include<iostream.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
class point{
public:
int x;
int y;
double t;
void setp(int a,int b,double c)
{
x=a;
y=b;
t=c;
}
};
point points[27];
int max()
{
int m=0;
for(int i=0;i<26;i++)
if((points[i].x+points[i].y)>(points[m].x+points[m].y))
m=i;
return m;
}
int explore1(point a)
{
int m[25];int k=0;
for(int j=0;j<26;j++)
if((a.x>=points[j].x)||(a.y>=points[j].y))
if(points[j].x+points[j].y!=0)
if((a.x!=points[j].x)&&(a.y!=points[j].y))
if((abs(a.x-points[j].x)+abs(a.y-points[j].y))<(a.x+a.y)/2)
{
m[k]=j;
k++;
}
int q;
if(k)
{
q=rand()%k;
return m[q];
}
else
return 26 ;
}
int explore2(point a,point b)
{
int m[25];int k=0;
for(int j=0;j<26;j++)
if(a.t+b.t+points[j].t<=6.0)
if((b.x!=points[j].x)&&(b.y!=points[j].y)&&(a.x!=points[j].x)&&(a.y!=points[j].y))
if((a.x>=points[j].x)||(a.y>=points[j].y))
if(points[j].y+points[j].x!=0)
if((abs(a.x-points[j].x)+abs(a.y-points[j].y))<(a.x+a.y)/3)
{
m[k]=j;
k++;
}
int q;
if(k)
{
q=rand()%k;
return m[q];
}
else
return 26 ;
}
int explore3(point a,point b,point c)
{
int m[25];
int k=0;
for(int j=0;j<26;j++)
if((a.t+b.t+c.t+points[j].t<=6.0)&&(a.t+b.t+c.t+points[j].t>=4.2))
if((c.x!=points[j].x)&&(c.y!=points[j].y)&&(b.x!=points[j].x)&&(b.y!=points[j].y)&&(a.x!=points[j].x)&&(a.y!=points[j].y))
if((a.x>=points[j].x)&&(a.y>=points[j].y)&&(points[j].y+points[j].x!=0))
//if((abs(a.x-points[j].x)+abs(a.y-points[j].y))<(a.x+a.y)/3)
{
m[k]=j;
k++;
}
int q;
if(k)
{
q=rand()%k;
return m[q];
}
else
return 26 ;
}
double result(point a,point b,point c,point d)
{
double T=(a.x+a.y+abs(a.x-b.x)+abs(a.y-b.y)+abs(c.x-b.x)+abs(c.y-b.y)+abs(c.x-d.x)+abs(c.y-d.y)+d.x+d.y)*1.0/35+1.0/6;
if(b.t!=0)
T+=1.0/6;
if(c.t!=0)
T+=1.0/6;
if(d.t!=0)
T+=1.0/6;
double M=(a.x+a.y)*0.4+(abs(a.x-b.x)+abs(a.y-b.y))*a.t*1.8+(abs(c.x-b.x)+abs(c.y-b.y))*(a.t+b.t)*1.8+(abs(c.x-d.x)+abs(c.y-d.y))*(a.t+c.t+b.t)*1.8+(d.x+d.y)*(a.t+d.t+c.t+b.t)*1.8;
cout<<"时间:"<<T<<'\n'<<"花费:"<<M<<'\n';
return M;
}
void main()
{
for(int w=0;w<8;w++)
{
cout<<"第"<<w<<"组结果:"<<'\n'<<'\n';
srand(time(NULL));
points[0].setp(3,2,1.50);
points[1].setp(1,5,1.50);
points[2].setp(0,8,0.85);
points[3].setp(3,11,1.3);
points[4].setp(7,9,1.2);
points[5].setp(9,6,2.3);
points[6].setp(14,0,1.5);
points[7].setp(17,3,1.1);
points[8].setp(14,6,2.5);
points[9].setp(10,12,1.8);
points[10].setp(7,14,0.6);
points[11].setp(2,16,1.5);
points[12].setp(11,17,1.5);
points[13].setp(15,12,0.8);
points[14].setp(19,9,1.4);
points[15].setp(22,5,1.2);
points[16].setp(15,19,1.6);
points[17].setp(15,14,1.6);
points[18].setp(20,17,1);
points[19].setp(21,13,2);
points[20].setp(25,16,2.1);
points[21].setp(28,18,1.2);
points[22].setp(5,12,1.9);
points[23].setp(25,7,1.6);
points[24].setp(9,20,1.2);
points[25].setp(9,15,1.5);
points[26].setp(0,0,0);
double cost=0;
for(int n=0;n<5;n++)
{
int z=max();
int d=explore1(points[z]);
cout<<"第"<<n+1<<"条路线:"<<'\n';
cout<<points[z].x<<'\t'<<points[z].y<<'\t'<<points[z].t<<'\n';
point h=points[d];
int e=explore2(h,points[z]);
cout<<h.x<<'\t'<<h.y<<'\t'<<h.t<<'\n';
point j=points[e];
int f=explore3(j,h,points[z]);
cout<<j.x<<'\t'<<j.y<<'\t'<<j.t<<'\n';
point p=points[f];
cout<<p.x<<'\t'<<p.y<<'\t'<<p.t<<'\n';
cost+=result(points[z],h,j,p);
points[z].setp(0,0,0);
points[d].setp(0,0,0);
points[e].setp(0,0,0);
points[f].setp(0,0,0);
}
cout<<"总花费:"<<cost<<'\n';
cout<<"剩余点为:"<<'\n';
for(int s=0;s<27;s++)
{
if(points[s].x+points[s].y+points[s].t==0)
continue;
else
cout<<points[s].x<<'\t'<<points[s].y<<'\t'<<points[s].t<<'\n';
}
}
}
...全文
相关推荐
变分贝叶斯推理(平均场理论,变分法,贝叶斯推断,EM 算法,KL 散度,变分估计,变分消息传递)
KL散度(Kullback–Leibler散度)是衡量两个概率分布差异的非对称度量。在变分贝叶斯推理中,KL散度被用来衡量近似分布与真实后验分布之间的差异。
仿csdn,有积分、设置提问分、散分等功能
**后端功能扩展**:对BBSXP的源代码进行修改,实现积分系统、提问分设置和散分功能。这可能涉及到数据库结构的调整、逻辑处理的编写以及接口设计等。4.
js平面广告移动(本资源分1分。。。)
本资源分1分。。。本资源分1分。。。本资源分1分。。。
二维直方图斜分最大散度差阈值分割算法 (2014年)
"二维直方图斜分最大散度差阈值分割算法 (2014年)"本文介绍了一种基于二维直方图斜分的最大散度差法的图像阈值分割算法,旨在提高图像在面临噪声干扰和光照不均匀情况下的分割准确性。最大散度差法是对
[nlp] KL散度与JS散度
1.KL散度KL散度( Kullback–Leibler divergence) (最大类间散度)是描述两个概率分布差异的一种测度。对于两个概率分布P、Q,二者越相似,KL散度越小。KL散度的性质


