您的位置:首页 > 其它

电路布线问题

2016-12-29 12:24 274 查看
作电路板时,将n条连线分布到若干绝缘层上。在同一层的连线不相交。
电路布线问题就是要确定将哪些连线安排到第一层上,使该层上有尽可能多的连线。



动态规划

#include<stdio.h>
#define n 10
int a[n+1]={0,8,7,4,2,5,1,9,3,10,6};
int m[n+1][n+1];
void find(int i,int j)
{
if(m[i][j]==0||i<0)
return;
if(m[i][j]==m[i-1][j])//说明当前第i根线没有在这一层上
find(i-1,j);
else
{
printf("%d\t",i);
find(i,a[i]-1);
}

}
int main()
{
int i,j;
for(int i=0;i<=n;i++)
{
m[0][i]=0;
m[i][0]=0;
}
int add,unadd;
for(i=1;i<=n;i++)//线头
{
for(j=1;j<=n;j++)//线尾
{
if(j<a[i])//判断线尾是否到达将要添加的线的线尾,如果没有就等于没添加前的
m[i][j]=m[i-1][j];//没添加之前
else
{
add=m[i-1][a[i]-1]+1;//因为有可能添加第i根线后会造成其他线的断掉所以应该找到这根线线尾之前的位置
unadd=m[i-1][j];
m[i][j]=add>unadd?add:unadd;
}
}
}
printf("%d\n",m

);
// for(i=0;i<=n;i++)
// {
// for(j=0;j<=n;j++)
// printf("%d\t",m[i][j]);
// printf("\n");
// }
find(10,10);
printf("\n");
}结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法