好房网

网站首页 二手房 > 综合生活 > 正文

电路图布线(电路布线问题(动态规划))

2022-07-08 06:23:29 综合生活 来源:
导读 想必现在有很多小伙伴对于电路布线问题(动态规划)方面的知识都比较想要了解,那么今天小好小编就为大家收集了一些关于电路布线问题(动

想必现在有很多小伙伴对于电路布线问题(动态规划)方面的知识都比较想要了解,那么今天小好小编就为大家收集了一些关于电路布线问题(动态规划)方面的知识分享给大家,希望大家会喜欢哦。

1、问题分析

2、最优子结构性质记N(i,j) = {t|(t, π(i)) ∈ Nets,t ≤ i, π(t) ≤ j }. N(i,j)的最大不相交子集为MNS(i,j)。Size(i,j)=|MNS(i,j)|。

3、当i = 1时

4、转载或者定引用本厂文内到容请注明来源照于芝正士回答

5、当i >1时,①       j

6、递归计算最优值经以上后分,可电路布线问题的最优值为Size(n,n)。由该问题的最优子结构性质可知:

7、根据上面递归式可以得到二维表:

8、红色标明的就是算法选择的路径(向上优先,也可以用向左优先,答案都是四个,但值会有一点不同)。在斜角值改变时可以取得所求的子集。即 9->10,7->9,5->5,3->4

9、C++源码实现

10、/** 计算最优值* 输入参数C[]:  接线方式* 输入参数n :   接线柱数* 输入参数size: 二维表数组*/void mnset(int C[],int n,int *size){    int i,j;       // 当i = 1时    for(j = 0;j

11、/** 构造最优值* 输入参数C:    接线方式* 输入参数size: 二维表数组* 输入参数n :   接线柱数* 输入参数Net:  最大子集数组* 输入参数m:    最大子集数*/void traceBack(int C[], int *size, int n, int Net[], int &m){    int i,j = n;    m = 0;    for (i = n;i>1;i--)    {        if (size[i*(n+1)+j] != size[(i-1)*(n+1)+j])        {            Net[m++] = i;            j = C[i] - 1;        }    }    if (j >= C[1])    {        Net[m++] = 1;    }}

12、测试代码int main(){    int n;       // 接线数目    int num;     // 最大子集数    int *l;      // 接线方式    int *p;      // 子集数    int *size;   // 二维表数组    cout > n;     // 动态创建热线方式数组    l = new int[n+1];    // 动态创建子集数组    p = new int[n+1];    // 临时动态创建二维数组    int **temp;    temp=new int*[n+1];    for(int i=0;i

13、大三相线战极带类况连值王京。

本文到此结束,希望对大家有所帮助。


版权说明: 本文由用户上传,如有侵权请联系删除!


标签: