#include <STDLIB.H>
#include <STDIO.H>
/******************************************************************
问题描述:
对于一个有N个引脚的电路板,我们需要在这些引脚之间连线。现在对于给
定的连接引脚的方法,需要程序判断,这组方法是否会产生线段之间的交叉。
输入:
电路板的引脚数量;(1,2),?(3,4),......连线的方式。(1,2)表
示1、2号引脚存在连线.
要求实现函数:
unsigned int Lay_line(int n, unsigned int *p)
不产生交叉返回0;产生交叉返回1.
输入参数:n:电路板引脚个数;?
p:指向一个数组(长度固定为64),表示电路板引脚连接方式;
输入:1 4 2 3 0 (0表示布线结束)表示该连接方案有两个连接 1号 4号管脚
连接 2号3号管角连接
*******************************************************************/
#include <STDIO.H>
/******************************************************************
问题描述:
对于一个有N个引脚的电路板,我们需要在这些引脚之间连线。现在对于给
定的连接引脚的方法,需要程序判断,这组方法是否会产生线段之间的交叉。
输入:
电路板的引脚数量;(1,2),?(3,4),......连线的方式。(1,2)表
示1、2号引脚存在连线.
要求实现函数:
unsigned int Lay_line(int n, unsigned int *p)
不产生交叉返回0;产生交叉返回1.
输入参数:n:电路板引脚个数;?
p:指向一个数组(长度固定为64),表示电路板引脚连接方式;
输入:1 4 2 3 0 (0表示布线结束)表示该连接方案有两个连接 1号 4号管脚
连接 2号3号管角连接
*******************************************************************/
*******************************************************************/
#define N 64
unsigned int Lay_line(int n,unsigned int *p)
{
int i,length,j;
for(i=0;i<64;i++)
if(p[i]==0)
break;
length=i;
for(i=0;i<length;i=i+2)
{
for(j=0;j<length;j++)
if((p[j]>p[i]&&p[j]<p[i+1])||(p[j]>p[i+1]&&p[j]<p[i]))
return 1;
}
return 0;
}
int main()
{
/*数据的输入*/
int A[N],*p,i=0,n,out;
p=A;
scanf("%d",&n);
printf("please input the number :\n");
do
{
scanf("%d",&A[i]);
if(A[i]>n)
return printf("input the error numbers!!!");
i=i+1;
}
while(A[i-1]!=0);
if(i%2==0)
return printf("input the error numbers!!!");
out=Lay_line(n,p);
printf("the last result is: %d \n",out);
return 1;
}