zju 1648,谁能帮我看看为什么WA?

来源:百度知道 编辑:UC知道 时间:2024/09/28 17:20:27
http://acm.zju.edu.cn/show_problem.php?pid=1648

#include<iostream>
using namespace std;

double line[2010][4];

double max(double a,double b){return a>b?a:b;}
double min(double a,double b){return a<b?a:b;}

int isParallel(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){
if(x1==x2||x3==x4) return 1;
if(y1==y2||y3==y4) return 1;
if((y1-y2)*(x3-x4)==(y3-y4)*(x1-x2)) return 1;
return 0;
}

int isCross(double x1,double y1,double x2,double y2,double x3,double y3,double x4,double y4){
double x=(y1-y3+((y4-y3)/(x4-x3))*x3-((y2-y1)/(x2-x1))*x1)/(((y4-y3)/(x4-x3))-((y2-y1)/(x2-x1)));
double y=y1+(y2-y1)/(x2-x1)*(x-x1);
if(x>=min(x1,x2)&&x<=max(x1,x2)&&y<=max(y1,y2)&&y>=min(y1,y2)) return 1;
else retu

问题在于:
1、当遇到两条线段相交时,没有从循环完全退出,导致再次遇到两条线段相交时,重复输出"burned!" 。
2、两条线段是否平行的判断有些问题:
int isParallel(double x1,double y1,double x2,double y2,
double x3,double y3,double x4,double y4)
{
if(x1==x2&&x3==x4) return 1;
if(y1==y2&&y3==y4) return 1;

if(x1==x2&&x3!=x4) return 0;
if(x1!=x2&&x3==x4) return 0;
if(y1==y2&&y3!=y4) return 0;
if(y1!=y2&&y3==y4) return 0;

if((y2-y1)/(x2-x1)==(y4-y3)/(x4-x3)) return 1;
return 0;
}

程序看不懂,《算法导论》上有讲解怎么判断两条线段是否相交