请问凸包算法的时间复杂度的测试代码怎么写?
代码一(在编辑器中将"_ "(下划线 空格)替换成两个空格即可编译; 注意要去掉开通的双字节中文空格,蛋疼的百科。)#include #include using namespace std;struct point{_ _ int x;_ _ int y;} p[30005],res[30005];//p标记图中所有的点,res标记凸包上的点int cmp(point p1,point p2){_ _ return p1。 y (p3。x - p1。x)*(p2。y - p1。y);}int main(){_ _ int n,i;_ _ while(scanf("%d",&n) !=...全部
代码一(在编辑器中将"_ "(下划线 空格)替换成两个空格即可编译; 注意要去掉开通的双字节中文空格,蛋疼的百科。)#include #include using namespace std;struct point{_ _ int x;_ _ int y;} p[30005],res[30005];//p标记图中所有的点,res标记凸包上的点int cmp(point p1,point p2){_ _ return p1。
y (p3。x - p1。x)*(p2。y - p1。y);}int main(){_ _ int n,i;_ _ while(scanf("%d",&n) != EOF) //一共有n个点_ _ {_ _ _ _ for(i = 0; i = 0; i--)_ _ _ _ {_ _ _ _ _ _ while(top != len && !ral(res[top],res[top - 1],p[i]))_ _ _ _ _ _ top--;_ _ _ _ _ _ res[ top] = p[i];_ _ _ _ }_ _ _ _ for(i = 0; i // 求点集合的凸包的gram算法。
n是顶点个数,x,y是顶点坐标。#include // order 是按照顶点和左下脚的角度的排序后数组。#include // tu即是逆时针的凸包上的顶点。#include //using namespace std; //使用条件:1。
点可以任意给,可重复。// 2。三个以及以上的点。ifstream fin("input。txt"); // 3。已经考虑了边上有点的情况。#define NN 1000#define pi 3。
1415827typedef struct Cseg{double x,y,tg;}Cseg;int n;double x[NN],y[NN];deque order;deque tu;Cseg seg1;deque ::iterator p1;deque ::iterator p,q;void in();void gram();void makeorder(int s);double dist(double x1,double yy1,double x2,double yy2);double cross(double x1,double yy1,double x2,double yy2);void out();int main(){in();gram();out();return 0;}void out(){int i;for (i=0;i>n;for (i=0;i>x>>y;return;}void gram(){int i,mm;mm=0;for (i=1;iy 1e-9) mm=i;else if (fabs(y[mm]-y)x 1e-9) mm=i;makeorder(mm);seg1。
x=x[mm];seg1。y=y[mm];tu。clear();tu。push_back(0);tu。push_back⑴;tu。push_back⑵;for (i=3;i1e-9)tu。push_back(i);else{tu。
pop_back();i--;continue;//tu。push_back(i);}}//forreturn;}void makeorder(int s){int i;double tg;order。
clear();for (i=0;itg)dist(x[s],y[s],p1->x,p1->y) 1e-9) {p1->x=x;p1->y=y;}break;}elseif (tgtg){order。
insert(p1,seg1);break;}p1 ;}//whileif (p1==order。end()) order。insert(p1,seg1);}//forseg1。x=x[s];seg1。
y=y[s];order。insert(order。
begin(),seg1);//for (i=0;iy then exit⑴else exit⑵;endelsebeginif xj;if ihead then qsort(head,j);end;function Plot(x1,y1,x2,y2:extended):extended;beginPlot:=x1*y2-x2*y1;end;function check(first,last,new:longint):boolean;varax,ay,bx,by :extended;Pt :extended;beginax:=x[last]-x[first];ay:=y[last]-y[first];bx:=x[new]-x[first];by:=y[new]-y[first];if Plot(ax,ay,bx,by)1)and check(zz[tail-1],zz[tail],i) do dec(tail);inc(tail);zz[tail]:=i;end;inc(tot,tail-1);for i:=1 to tail-1 donum[i]:=zz[i];zz[1]:=n;tail:=1;for i:=n-1 downto 1 dobeginwhile (zz[tail]<>n)and check(zz[tail-1],zz[tail],i) do dec(tail);inc(tail);zz[tail]:=i;end;for i:=1 to tail-1 donum[tot i]:=zz[i];inc(tot,tail-1);end;function dist(a,b:longint):extended;begindist:=sqrt((x[a]-x[b])*(x[a]-x[b]) (y[a]-y[b])*(y[a]-y[b]));end;procedure main;vari,j :longint;beginqsort(1,n);Tbao;ans:=0;for i:=1 to tot-1 doans:=ans dist(num[i],num[i 1]);ans:=ans dist(num[tot],num[1]);ans:=ans temp*pi*2;writeln(ans:0:0);end;begininit;main;end。收起