动态规划,电路分布.docVIP

  • 5
  • 0
  • 约2.46千字
  • 约 5页
  • 2016-10-21 发布于重庆
  • 举报
动态规划,电路分布

#ifndef CIRCUITLAYOUT_H #define CIRCUITLAYOUT_H class CircuitLayout{ private: int count;//最大连线柱 int *c;//int **Size;//最大连线数目 int *net;//存储连线 bool Input(); int max(int,int); void mnset(int *c,int **Size);//计算最优值 int traceback(int *c,int **Size,int *net);//构造最优解 public: CircuitLayout(); ~CircuitLayout(); bool Run();//运行接口函数 }; #endif //CircuitLayout.cpp #include CircuitLayout.h #include iostream #include math.h using namespace std; #define MAX(a,b) (((a)(b)?(a):(b))) #define M 50 ////////////////////////////////////// CircuitLayout::CircuitLayout(){ int N = 0; c = new int[M]; net = new int[M]; Size = new int*[M]; for(int i=0;iM;++i) Size[i] = new int[M]; } ////////////////////////////////////// CircuitLayout::~CircuitLayout(){ for(int i=0;iM;++i) delete []Size[i]; delete []Size; delete []c; delete []net; } ////////////////////////////////////// bool CircuitLayout::Input(){ int n; cout 请输入接线柱的个数: ; cin n; count = n; cout 请依次输入被连接数: endl; for(int i=0;in;++i) cin c[i]; if(c) return true; else return false; } //////////////////////////////////////////// int CircuitLayout::max(int a,int b){ if(a = b) return a;else return b; } //////////////////////////////////////////// void CircuitLayout::mnset(int *c,int **Size){ int i=0; int j=0; int n = count-1;?? ??for(j=0;jc[1];j++)?? ? ?? ?Size[1][j] = 0;?? ? for(j=c[1];j=n;j++)?? ?? ? ?Size[1][j] = 1;??? ?for (i=2;in;i++){?? ?? ? ?for (j=0; jc[i] ; j++)?? ? ? ? ?? ?Size[i][j] = Size[i-1][j];?? ?? ? ?for (j=c[i];j=n;j++)?? ? ? ?? ? ?Size[i][j] = max(Size[i-1][j],Size[i-1][c[i]-1]+1);??? ?}??? ?Size[n][n] = max(Size[n-1][n],Size[n-1][c[n]-1]+1); cout s[n][n]: Size[n][n] endl; } ////////////////////////////////////////////////////////// int CircuitLayout::traceback(int *c,int **Size,int *net){ int n = count-1; int j = n;??? ?int m = 0;??? ?for (int i=n;i0;i--){?? ? ?? ?if (Size[i][j] != Size[i-1][j]){?? ? ? ?? ? ?net[m++] = i;?? ? ? ? ? ?j = c[i] - 1;?? ?? ? ?}??? ?}??? ?if(j=c[0])?? ? ?? ?net[m++] = 0; for(int k=0;km;++k) c

文档评论(0)

1亿VIP精品文档

相关文档