首页 新闻 赞助 找找看

c++代码错误

0
悬赏园豆:20 [待解决问题]

// 3.cpp : 定义控制台应用程序的入口点。 //

#include "stdafx.h" #include<iostream> using namespace std; class X { private:  int ID;  float x,y; public:   int operator<=(X a)  {   return(y<=a.y);  }   X(float a,float b)   {    x=a;    y=b;   } }; class Y { private:  int p;  float x,y; public:  int operator<=(Y a)  {   return(y<=a.y);  }

}; float fabs(float a,float b) {  float s;  if(a-b<0)   s=b-a;  else   s=a-b;  return s; } template<class type> void mergesort(type a[],int n) {  type *b=new type[n];  int s=1;  while(s<n)  {   mergepass(a,b,s,n);   s+=s;   mergepass(b,a,s,n);   s+=s;  } } template<class type> void mergepass(type x[],type y[],int s,int n) {  int i=0;  while(i<n-2*s)  {   merge(x,y,i+s-1,i+2*s-1);   i=i+2*s;  }  if(i+s<n)   merge(x,y,i,i+s-1,n-1);  else   for(int j=i;j<=n-1;j++)    y[j]=x[j]; } template<class type> void merge(type c[],type d[],int l,int m,int r) {  int i=l,j=m+1,k=1;  while((i<=m)&&(j<=r))   if(c[i]<=c[j]) d[k++]=c[i++];   else d[k++]=c[j++];   if(i>m)    for(int q=j;q<=r;q++)     d[k++]=c[q];   else    for(int q=i;q<=m;q++)     d[k++]=c[q]; } template<class type> inline float distance(const type & u,const type & v) {  float dx=u.x-v.x;  float dy=u.y-v.y;  return sqrt(dx*dx+dy*dy); } void closest(X x[],Y y[],Y z[],int l,int r,X & a,X & b,float & d) {  if(r-l==1)  {   a=x[l];      b=x[r];   d=distance(x[l],x[r]);   return;  }  if(r-1==2)  {   float d1=distance(x[l],x[l+1]);         float d2=distance(x[l+1],x[r]);         float d3=distance(x[l],x[r]);   if(d1<=d2&&d1<=d3)   {    a=x[l];    b=x[l+1];    d=d1;    return;   }   if(d1<=d3)   {    a=x[l+1];    b=x[r];    d=d2;   }   else   {    a=x[l];    b=x[r];    d=d3;   }   return;  }  int m=(l+r)/2;  int f=l,g=m+1;  for(int i=l;i<=r;i++)   if(y[i].p>m) z[g++]=y[i];   else z[f++]=y[i];         closest(x,y,z,l,m,a,b,d);   float dr;   pointx ar,br;         closest(x,z,y,m+1,r,ar,br,dr);   if(dr<d)   {    a=ar;    b=br;    d=dr;   }   merge(z,y,l,m,r);   int k=l;   for(int i=l;i<=r;i++)    if(fabs(y[m].x-y[i].x)<d) z[k++]=y[i];   for(int i=l;i<k;i++)   {    for(int j=i+1;j<k&&z[j].y-z[i].y<d;j++)    {     float dp=distance(z[i],z[j]);     if(dp<d)     {      d=dp;      a=x[z[i].p];      b=x[z[j].p];     }    }   } } bool cpair2(X x[],int n,X & a,X & b,float & d) {  if(n<2) return false;  mergesort(x,n);  pointy *y=new pointy[n];  for(int i=0;i<n;i++)  {   y[i].p=i;   y[i].x=x[i].x;   y[i].y=x[i].y;  }  mergesort(y,n);  pointy *z=new pointy[n];  closest(x,y,z,0,n-1,a,b,d);  delete[] y;  delete[] x;  return true; }

int _tmain(int argc, _TCHAR* argv[]) {  xx a;  xx b;  float c;  X xx(1,2);  X xx(2,3);  X xx(3,4);  cpair2(xx,3,a,b,c)  return 0; }

1古月1的主页 1古月1 | 初学一级 | 园豆:182
提问于:2012-04-21 17:31
< >
分享
所有回答(2)
0

1:格式太太太混乱

2:你的问题是什么?

zsounder | 园豆:2819 (老鸟四级) | 2012-04-21 18:13

代码错误。

支持(0) 反对(0) 1古月1 | 园豆:182 (初学一级) | 2012-04-21 21:00

@1古月1: 你这种问题只能绕着走。,。。

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2012-04-21 21:09

@Wang Hui: 什么绕着走

支持(0) 反对(0) 1古月1 | 园豆:182 (初学一级) | 2012-04-24 20:29

@1古月1: 意思就是你这种问题没法回答,有多少人有耐心看你的大片代码,而且是格式机器混乱,命名不规范且无实际意义,就连最起码的代码功能也不说一下!学习一下如何提问,如何让别人尽快进入你的问题,理解你的意思。

 

代码错误! 这算什么错误。。。。。

支持(0) 反对(0) zsounder | 园豆:2819 (老鸟四级) | 2012-04-24 20:52
0

你应该说出你的问题,,不是把代码复上来,这样人家才能帮你嘛

Wandroid | 园豆:123 (初学一级) | 2012-04-22 11:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册