华为题目4。。。2014.5.3

本文介绍了一种用于检测电路板布线方案中是否存在线段交叉的算法,包括输入参数解析、布线过程和交叉检测逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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号管角连接
*******************************************************************/
*******************************************************************/
#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; 
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值