C++天空
cpp_stu2's Land
凸包问题
#include
#include
using namespace std; ifstream fin ("bag.in"); ofstream fout ("bag.out"); struct xys { int x; int y; }; int N;//数目 xys xy[101];//坐标系 int top;//堆栈顶 int stk[101];//堆栈 void swap(xys *a,xys *b) { xys tmp = *a; *a = *b; *b =tmp; } int multi(xys a,xys b,xys c) { return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y);//求叉积 } bool comp(xys p1,xys p2) { int t; t=multi(p1,p2,xy[0]); if ((t>=0)&&((p1.x-xy[0].x)+(p1.y-xy[0].y)<(p2.x-xy[0].x)+(p2.y-xy[0].y))) return true;//叉积正确 return false; } void sort(int p,int r) { int i,j; xys x; if (r-p+1<=5) { for (j=p+1;j<=r;j++) { i=j; while(i>1&&comp(xy[i],xy[i-1])) { swap(&xy[i],&xy[i-1]);//交换元素 i--; } } } else { x=xy[p+rand()%(r-p+1)];//随即选区一个支点 i=p,j=r; do { while (comp(xy[i],x))i++; while (comp(x,xy[j]))j--; if (i
>N; for(i=0;i
>xy[i].x>>xy[i].y; if (xy[i].y<=xy[0].y&&xy[i].x
=0) top--;//所有未向左传的点去掉 top++; stk[top]=i;//入栈 } for (i=1;i<=top;i++) fout<
posted on 2007-06-30 11:02
姜雨生
阅读(656)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
<
2025年1月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
导航
C++博客
首页
新随笔
联系
聚合
管理
统计
随笔 - 1
文章 - 1
评论 - 0
引用 - 0
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
2007年6月 (1)
文章档案
2007年6月 (1)
搜索
最新评论
Powered by:
C++博客
Copyright © 姜雨生