題目大意:給出一些點,讓你只能向左轉向走完所有的點,輸出路徑。
思路:按著要求模擬即可,走過的點標記一下,然後跑凸包即可。
accode:
//#pragma comment(linker, "/stack:1024000000,1024000000")
#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
#define pair pair//#define max(a,b) (a)>(b)?(a):(b)
//#define min(a,b) (a)<(b)?(a):(b)
#define clean(a,b) memset(a,b,sizeof(a))// ??
//std::ios::sync_with_stdio(false);
// register
const int maxn=1e2+10;
const int inf32=0x3f3f3f3f;
const ll inf64=0x3f3f3f3f3f3f3f3f;
const ll mod=1e9+7;
const double pi=acos(-1.0);
const double eps=1.0e-8;
struct point
friend point operator + (const point &a,const point &b)
friend point operator - (const point &a,const point &b)
friend double operator ^ (point a,point b)
friend int operator == (const point &a,const point &b)//printf("不相交: l1:(%lf,%lf),(%lf,%lf) l2:(%lf,%lf),(%lf,%lf)\n",l1.start.x,l1.start.y,l1.end.x,l1.end.y,l2.start.x,l2.start.y,l2.end.x,l2.end.y);
return 0;
}int judge(v l)
stk[++top]=dots[j];vis[stk[top].id]=1;
// cout<<"add : "/ for(int k=2;k<=top;++k) cout<}
// cout<<"debug:-----"/ for(int j=2;j<=top;++j) cout<}printf("%d %d",top-1,stk[2].id);
for(int i=3;i<=top;++i)printf("\n"); }
}/*114
1 6 11
2 11 9
3 8 7
4 12 8
5 9 20
6 3 2
7 1 6
8 2 13
9 15 1
10 14 17
11 13 19
12 5 18
13 7 3
14 10 16
*/
POJ 1696 Space Ant 計算幾何
題意 給出一系列二維點,問從 0,y 出發,y是這些點裡縱座標的最小值,只能左轉或者直走,並且每個點只能走一次,輸出能走完這些點的路徑的順序。題解 先找到第乙個點,它肯定是當y取最小時的那個點,然後接下來開始遍歷,每次找的點與pre連成的線都要與pre和first連成的線的夾角最小,找到後就更新fi...
poj 1696 Space Ant 有關極角
題意 從最低的點開始,不能向右拐,問能經過多少點?能定是經過所有點了 從最低點開始,求與其極角最小的點,作為新的起點,在需找與這個點成極角最小的點,依次即可 include includestruct point dian 60 int n int dis point a,point b int c...
poj 1696 Space Ant 卷包裹法
首先好好研究卷包裹法的思路,發現每一plant一定是可以走到的。這篇文章寫的很好 這裡 然後就是把這些點的標號存起來啦,因為不是求點的座標,要儲存原來的標號,所以弄了乙個struct 作為對映原來的標號用。bool 陣列依舊用來表示是否已經被加入 卷包裹遍歷集合 include include in...