題目中指定了ant爬行時的幾種規則,從中我們可以知道ant是按照當前所處位置,對其他的plant進行極角排序後,選擇角度最小過去,重複,一直到走到最後乙個plant。
sort一發就可以了
#include
#include
#include
#include
#include
const
double eps=1e-8;
const
int maxn=50+5;
using
namespace
std;
int n; //點的個數
int sgn(double x)
struct point
point(int _x,int _y)
};typedef point vector;
vector
operator + (vector a,vector b)
vector
operator - (point a,point b)
intoperator ^ (vector a,vector b)
intoperator * (vector a,vector b)
double dis(point a,point b)
point p[maxn];
int q[maxn];
int pos,cnt;
bool cmp(point a,point b) //極角排序函式
void init()
void solve()
}int main()
init();
solve();
/*for(int i=1;i<=n;i++)
printf("(%d,%d)\n",p[i].x,p[i].y);*/
cout
printf(" %d",q[i]);
cout
0;}
極角排序 POJ1696
vj題目連線 一種奇怪的蟲子不能右轉且走過路線之間不能有交點,吃植物才能存活,給出植物的座標,求蟲子要怎樣走才能活得最久 吃的植物越多活越久 輸入 樣例數,n組樣例,每組給出乙個n,然後n行每行給出3個數,分別是植物編號 植物x座標 植物y座標 輸出 能吃的最大植物數目,並給出路線 因為蟲子只能左轉...
poj1696(極角排序,貪心)
恢復內容開始 題意 有n個點,規定起點,每次只能向左走,不能與之前的路徑交叉,求最多能經過幾個點。思路 其實這題因為起點的y座標最小,那麼經過的點數一定就是所有的點數n,然後顯然我們優先選擇偏移角度最小的點作為後繼,也就是極角最小,那麼每次選擇乙個點後都按極角公升序排一次即可。我的 是遍歷了一遍,因...
POj 1696 Space Ant (極角排序)
題意 乙隻螞蟻,只會向左轉,現在給出平面上很多個點,求解一種走法,能使得螞蟻能經過的點最多,每個頂點該螞蟻只能經過一次,且所行走的路線不能發生交叉.對於題目所輸入的點,先找出最左下方的頂點 即縱座標最小的頂點 然後對剩下的頂點按照對與左下點的極角排序,然後反覆找最左下的點,反覆進行極角排序,同時記錄...