poj 1066

来源:互联网 发布:软件测试人员要求 编辑:程序博客网 时间:2024/06/05 04:58
//枚举了所有点到目的这条线的所有交点#include<stdio.h>#define N 35struct POINT{double x,y;       }purpose,a[4];struct LINE{POINT a, b;  }line[N];double chaji(POINT pi,POINT pj,POINT pk)   //叉积{return (pi.x-pk.x)*(pj.y-pk.y)-(pi.y-pk.y)*(pj.x-pk.x);}bool cross(POINT a,POINT b,POINT c,POINT d){if(chaji(a,b,c)*chaji(a,b,d)<0 && chaji(c,d,a)*chaji(c,d,b)<0)return 1;return 0;}int main(){int n,i,j,max,count;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)scanf("%lf%lf%lf%lf",&line[i].a.x,&line[i].a.y,&line[i].b.x,&line[i].b.y);        scanf("%lf%lf",&purpose.x,&purpose.y);        line[i++].a.x=0;line[i].a.y=0;line[i].b.x=100;line[i].b.y=0;        line[i++].a.x=100;line[i].a.y=0;line[i].b.x=100;line[i].b.y=100;line[i++].a.x=100;line[i].a.y=100; line[i].b.x=0;line[i].b.y=100;line[i++].a.x=0;line[i].a.y=100;line[i].b.x=0;line[i].b.y=0;                   max=9999999;        for(i=0;i<n+4;i++)        {count=0;for(j=0;j<n+4;j++)if(cross(line[i].a,purpose,line[j].a,line[j].b))//xiang jiaocount++;if(count<max)max=count;count=0;for(j=0;j<n+4;j++)if(cross(line[i].b,purpose,line[j].a,line[j].b))//xiang jiaocount++;if(count<max)max=count;}printf("Number of doors = %d\n",max+1);    }    return 0;}