POJ 1696

这题是明显的TU包变形。

使用卷包裹法可解,而且是必定可以经过所有点的。直观可知,当经过某点后,相当于把之前的点抹去,求剩下点的TU包,递归下去,也就能把点全部经过了。

于是,只需把经过的点标记一下就可以了。

#include 
#include 
#include 
#include 
#include 

using namespace std;
const double inf=10000000;
const double eps=0.00000001;
struct point {
	double x,y;
	int num;
}p[60];

bool vis[60];
queueque;
struct vect{
	double x,y;
};

double dist(point a,point b){
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

double cross(point a,point b,point c,point d){
	return (a.x-b.x)*(c.y-d.y)-(a.y-b.y)*(c.x-d.x);
}

int n;
int main(){
	int t;
	scanf("%d",&t); double a,b;
	while(t--){
		scanf("%d",&n);
		point start; start.x=inf; start.y=inf; int dep;
		for(int i=0;i=0){
						tmp=p[i];
						dep=i;
						flag=true;
						break;
					}
				}
			}
		//	cout<

  

转载于:https://www.cnblogs.com/jie-dcai/p/3879458.html

你可能感兴趣的:(java)