在直角坐标系中有若干线段,有的线段会和其他线段的某一段重合,即某一端点坐标相同;这些线段会形成含有两条或两条以上线段的折线,求若干折线中含有线段最多的数目,输出,并输出折线最左端的坐标。
#include <stdio.h>
#define max 10001
struct segment{
int sx,sy,ex,ey;
int seg_num;
}s[max];
struct segment s1;
void main(){
int n,i,j;
s1.seg_num=1;
//printf("输入线段数目:");
scanf("%d",&n);
for(i=0;i<n;i++){
//printf("输入第%d条线段",i+1);
scanf("%d%d%d%d",&s[i].sx,&s[i].sy,&s[i].ex,&s[i].ey);
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(!fun(s[i],s[j])){
continue;
}
}
}
printf("%d%d\n",s1.sx,s1.sy);
printf("数量%d\n",s1.seg_num);
}
int fun(struct segment a,struct segment b){
if(a.sx==b.sx&&a.sy==b.sy){
s1.sx=a.sx;
s1.sy=a.sy;
s1.seg_num++;
return 1;
}
else if(a.ex==b.sx&&a.ey==b.sy){
s1.sx=a.sx;
s1.sy=a.sy;
s1.seg_num++;
return 1;
}
else if(a.sx==b.ex&&a.sy==b.ey){
s1.sx=b.sx;
s1.sy=b.sy;
s1.seg_num++;
return 1;
}
else if(a.ex==b.ex&&a.ey==b.ey){
if(a.sx<=b.ex){
s1.sx=a.sx;
s1.sy=a.sy;
}
else{
s1.sx=b.sx;
s1.sy=b.sy;
}
s1.seg_num++;
return 1;
}
else{
return 0;
}
}