www.gusucode.com > 基于递归算法的建筑外表面光伏电池布局优化分析与设计 > 基于递归算法的建筑外表面光伏电池布局优化分析与设计【论文+程序】/文章+源码/源程序/问题一/房顶/CUMCM_Q1_屋顶_step1.cpp
#include<stdio.h> #include<math.h> //记录各型号电池参数 typedef struct PVrect { char* type; //产品型号 int x; //产品长度 int y; //产品宽度 double value; //产品权值 }PVrect; int xx=10100,yy=6511.53; PVrect data[24]; int min=310; int choice=24; int PVrect_result[24]={0}; double RectFun(int x,int y) { double result=0; double result_1=0,result_2=0; int i,j; if(x<min||y<min) { return result; } else { for(i=0;i<choice;i++) { for(j=0;j<=1;j++) { if(j==0) { if(x>=data[i].x&&y>=data[i].y) { PVrect_result[i]++; result_1=data[i].value*data[i].x*data[i].y/1000000+RectFun(x-data[i].x,data[i].y)+RectFun(x,y-data[i].y); result_2=data[i].value*data[i].x*data[i].y/1000000+RectFun(x-data[i].x,y)+RectFun(data[i].x,y-data[i].y); if(result_1>=result_2) { return result_1; } else { return result_2; } } } else { if(x>=data[i].y&&y>=data[i].x) { PVrect_result[i]++; result_1=data[i].value*data[i].x*data[i].y/1000000+RectFun(x-data[i].y,data[i].x)+RectFun(x,y-data[i].x); result_2=data[i].value*data[i].x*data[i].y/1000000+RectFun(x-data[i].y,y)+RectFun(data[i].y,y-data[i].x); if(result_1>=result_2) { return result_1; } else { return result_2; } } } } } } } int main() { int i; double max; //各型号电池参数 data[0].type="A3"; data[0].x=1580; data[0].y=808; data[0].value=1902.904; data[1].type="B3"; data[1].x=1482; data[1].y=992; data[1].value=1835.303; data[2].type="B5"; data[2].x=1956; data[2].y=992; data[2].value=1817.046; data[3].type="B2"; data[3].x=1956; data[3].y=991; data[3].value=1650.181; data[4].type="B1"; data[4].x=1650; data[4].y=991; data[4].value=1647.149; data[5].type="B6"; data[5].x=1956; data[5].y=992; data[5].value=1543.677; data[6].type="B7"; data[6].x=1668; data[6].y=1000; data[6].value=1523.021; data[7].type="B4"; data[7].x=1640; data[7].y=992; data[7].value=1509.451; data[8].type="A1"; data[8].x=1580; data[8].y=808; data[8].value=1306.385; data[9].type="A4"; data[9].x=1651; data[9].y=992; data[9].value=1282.311; data[10].type="A2"; data[10].x=1956; data[10].y=991; data[10].value=1272.19; data[11].type="C1"; data[11].x=1300; data[11].y=1100; data[11].value=1270.905; data[12].type="C5"; data[12].x=1400; data[12].y=1100; data[12].value=1179.962; data[13].type="A5"; data[13].x=1650; data[13].y=991; data[13].value=1161.74; data[14].type="A6"; data[14].x=1956; data[14].y=991; data[14].value=1156.116; data[15].type="C3"; data[15].x=1414; data[15].y=1114; data[15].value=1154.749; data[16].type="C2"; data[16].x=1321; data[16].y=711; data[16].value=1121.689; data[17].type="C4"; data[17].x=1400; data[17].y=1100; data[17].value=1061.736; data[18].type="C11"; data[18].x=1645; data[18].y=712; data[18].value=776.4981; data[19].type="C10"; data[19].x=818; data[19].y=355; data[19].value=750.8778; data[20].type="C8"; data[20].x=615; data[20].y=355; data[20].value=665.3232; data[21].type="C9"; data[21].x=920; data[21].y=355; data[21].value=664.8453; data[22].type="C7"; data[22].x=615; data[22].y=180; data[22].value=660.8709; data[23].type="C6"; data[23].x=310; data[23].y=355; data[23].value=659.8465; max=RectFun(xx,yy); printf("%lf\n",max); for(i=0;i<choice;i++) { if(PVrect_result[i]>0) printf("%s\n",data[i].type); } return 0; }