散分啦。。。

sourcecodeoflinux 2008-05-18 12:16:14

#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';

}

}

}
...全文
141 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun2421437 2008-05-19
  • 打赏
  • 举报
回复
JF
ribut9225 2008-05-19
  • 打赏
  • 举报
回复
路过
againgame 2008-05-19
  • 打赏
  • 举报
回复
JF
  • 打赏
  • 举报
回复
jf
sallan 2008-05-19
  • 打赏
  • 举报
回复
我也接分
jieao111 2008-05-19
  • 打赏
  • 举报
回复
jf
krispan86 2008-05-18
  • 打赏
  • 举报
回复
飘过````
执假以为真 2008-05-18
  • 打赏
  • 举报
回复
Recieve the score
执假以为真 2008-05-18
  • 打赏
  • 举报
回复
接分
kukufly 2008-05-18
  • 打赏
  • 举报
回复
代码好长啊..
楼主好厉害.....
执假以为真 2008-05-18
  • 打赏
  • 举报
回复
JF
镜机 2008-05-18
  • 打赏
  • 举报
回复
接分。
akzing 2008-05-18
  • 打赏
  • 举报
回复
接分
egmkang 2008-05-18
  • 打赏
  • 举报
回复
接分
clhposs 2008-05-18
  • 打赏
  • 举报
回复
接分啦!
paidfighting 2008-05-18
  • 打赏
  • 举报
回复
jf
iu_81 2008-05-18
  • 打赏
  • 举报
回复
jf
Cryking 2008-05-18
  • 打赏
  • 举报
回复
终于好了 哈哈

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
struct point
{
int x;
int y;
double t;
};
point points[27];
void setp(point &T,int a,int b,double c)
{
T.x=a;
T.y=b;
T.t=c;
}

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=0;
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;
printf("时间:%f\n花费:%f\n",T,M);
return M;
}
int main(void)
{

for(int w=0;w<8;w++)
{
printf("第%d组结果:\n",w);
srand(time(NULL));
setp(points[0],3,2,1.50);
setp(points[1],1,5,1.50);
setp(points[2],1,5,1.50);
setp(points[3],0,8,0.85);
setp(points[4],3,11,1.3);
setp(points[5],7,9,1.2);
setp(points[6],9,6,2.3);
setp(points[7],14,0,1.5);
setp(points[8],17,3,1.1);
setp(points[9],14,6,2.5);
setp(points[10],10,12,1.8);
setp(points[11],7,14,0.6);
setp(points[12],2,16,1.5);
setp(points[13],11,17,1.5);
setp(points[14],15,12,0.8);
setp(points[15],19,9,1.4);
setp(points[16],22,5,1.2);
setp(points[17],15,19,1.6);
setp(points[18],15,14,1.6);
setp(points[19],20,17,1);
setp(points[20],21,13,2);
setp(points[21],25,16,2.1);
setp(points[22],28,18,1.2);
setp(points[23],5,12,1.9);
setp(points[24],25,7,1.6);
setp(points[25],9,20,1.2);
setp(points[26],9,15,1.5);
setp(points[27],0,0,0.0);
double cost=0;
for(int n=0;n <5;n++)
{
int z=max();
int d=explore1(points[z]);
printf("第%d条路线:\n",n+1);
printf("%d\t%d\t%f\n",points[z].x,points[z].y,points[z].t);
point h=points[d];
int e=explore2(h,points[z]);
printf("%d\t%d\t%f\n",h.x,h.y,h.t);
point j=points[e];
int f=explore3(j,h,points[z]);
printf("%d\t%d\t%f\n",j.x,j.y,j.t);
point p=points[f];
printf("%d\t%d\t%f\n",p.x,p.y,p.t);
cost+=result(points[z],h,j,p);
setp(points[z],0,0,0);
setp(points[d],0,0,0);
setp(points[e],0,0,0);
setp(points[f],0,0,0);
}
printf("总花费:%f",cost);
printf("剩余点为:\n");
for(int s=0;s<27;s++)
{
if((points[s].x+points[s].y+points[s].t)==0)
continue;
else
printf("%d\t%d\t%f\n",points[s].x,points[s].y,points[s].t);
}
}
system("pause");
return 0;
}
xyz0101123132 2008-05-18
  • 打赏
  • 举报
回复
我接
f22fbi 2008-05-18
  • 打赏
  • 举报
回复
jf
加载更多回复(29)

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧