コード例 #1
0
ファイル: main.cpp プロジェクト: stephfubi/Polygons
int main(int argc, char *argv[])
{
    if (argc == 1){
        testing();
    }
    else if (argc > 1){
        QString data;
        QList<Vertex> vl;
        QList<Vertex> poligon;
        if (readFile(argv[1], data)){
            if (parseVertexList(data, vl)){
                graham(vl, poligon);
                if (argc == 2){
                    if (!writeVertexList("OUT.TXT", poligon))
                        qDebug() << "Can not open file: OUT.TXT";
                }
                else {
                    if (!writeVertexList(argv[2], poligon))
                        qDebug() << "Can not open file: " << argv[2];
                }
            }
            qDebug() << "Invalid input data!";
        }
        qDebug() << "Cannot open file: " << argv[1];
    }
    return 0;
}
コード例 #2
0
ファイル: test_graham.cpp プロジェクト: stephfubi/Polygons
void test_graham::test()
{
    QList<Vertex> resVl;
    QFETCH(QList<Vertex>, allVertexList);
    QFETCH(QList<Vertex>, res);
    graham(allVertexList, resVl);
    QVERIFY2(resVl == res, "invalin ans");
}
コード例 #3
0
void init_links(Dllist *dll, int const LNK)
{
	switch (LNK)
	{
		case LEX: 
			copy_order(dll, STD, LEX);
			sort(dll->root, dll->length[LEX], dll, LEX);
			break;

		case POL: 
			if (dll->up2date[LEX])
			{
				copy_order(dll, LEX, POL);
				sort(dll->root->links[POL][FWD], dll->length[POL]-1, dll, POL);
			}
			else 
			{
				init_links(dll, LEX);
				init_links(dll, POL);
			}
			break;

		case GRA:
			if (dll->up2date[POL])
				graham(dll); 
			else
			{
				init_links(dll, POL);
				init_links(dll, GRA);
			}
			break;

		case JAR:
			if (dll->up2date[POL])
				jarvis(dll); 
			else
			{
				init_links(dll, POL);
				init_links(dll, JAR);
			}
			break;

		default: printf("Error in init_links function\n");
			break;
	}
}
コード例 #4
0
ファイル: POJ3348 Cows.cpp プロジェクト: GenguoWang/ZCookie
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d%d",&p[i].x,&p[i].y);
    }
    graham();
    p[n].x=p[0].x,p[n].y=p[0].y;
    double area=0;
    for(int i=0;i<top;i++)
    {
        area+=cross(p[stack[i]],p[stack[i+1]]);
    }
    if(area<0)area=-area;
    printf("%d\n",(int)area/100);
    return 0;
}
コード例 #5
0
int main()
{
#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
#endif
	int nCase=1;
	while(scanf("%d",&n)==1 && n)
	{
		printf("Forest %d\n",nCase++);
		for(int i=0;i<n;i++)
		{
			scanf("%lf %lf %lf %lf",&p[i].x,&p[i].y,&v[i],&l[i]);
		}
		int pp=-1;
		int size=1<<(n);
		for(int i=1;i<size;i++)
		{
			cnt=0;
			double val=0;
			double len=0;
			int ncnt=0;
			bool flag=false;
			for(int j=0;j<n;j++)
			{
				if(!(i&(1<<j)))
					pt[cnt++]=p[j];
				else
				{
					ncnt++;
					len+=l[j];
					val+=v[j];
					if(pp!=-1 && val>dp[pp]+eps)
					{
					    flag=true;
					    break;
					}
				}
			}
			if(flag)    continue;
			if(cnt==0)  continue;

			int tmp;
			if(cnt==2 || cnt==1)
			{
			    for(int k=0;k<cnt;k++)
                    convex[k]=pt[k];
                tmp=cnt;
			}
			else
                tmp=graham(cnt,pt,convex);
			double dist=getlength(tmp,convex);
			dp[i]=val;
			extra[i]=len-dist;
			num[i]=ncnt;
			if(pp==-1 && extra[i]>eps)
			{
			    pp=i;
			    continue;
			}
			if(extra[i]<-eps)   continue;
			if(dp[pp]>dp[i]+eps)
			{
			    pp=i;
			}
			else if(dp[pp]<dp[i]-eps){}
			else
			{
			    if(num[pp]>num[i])
                    pp=i;
			}
		}

		printf("Cut these trees:");
		for(int i=0;i<n;i++)
		{
			if(pp&(1<<i))
				printf(" %d",i+1);
		}
		printf("\nExtra wood: %.2f\n\n",extra[pp]);

	}

	return 0;
}