收藏 分享(赏)

算法实验 八皇后问题.docx

上传人:tkhy51908 文档编号:6994037 上传时间:2019-04-29 格式:DOCX 页数:16 大小:321.32KB
下载 相关 举报
算法实验 八皇后问题.docx_第1页
第1页 / 共16页
算法实验 八皇后问题.docx_第2页
第2页 / 共16页
算法实验 八皇后问题.docx_第3页
第3页 / 共16页
算法实验 八皇后问题.docx_第4页
第4页 / 共16页
算法实验 八皇后问题.docx_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、姓名:+ 学号:090610213 班级:0904103实验题目: 八皇后问题问题分析:要在 8*8 的国际象棋棋盘中放 8 个皇后,是任意两个皇后都不能互相吃掉。规则:皇后能吃掉同一行、同一列、同一对角线的任意棋子。解决问题的关键为怎样取到 8 个位置,判断他们符合要求。数学模型: 每一行中只能取到一个位置,这样问题的解空间就是 8 个皇后所在的列的序号。1)通过 8 重循环从每一行中取得一个位置,检验取到的检验 8个位置不在同一列、同一对角线。2)按深度优先的思想,从第一个皇后开始搜索,确定一个位置后,在搜索第二个皇后的位置;每前进一步检查是否满足约束条件,不满足时,用 continue

2、语句回溯到上一个皇后,继续尝试下一位置;满足约束条件时,开始搜索下一位置,知道找到问题解。约束条件:不在同一列的表达式 xi!=xj不在同一对角线上的约束条件 abs(xi-xj)!=abs(i-j)算法策略的选择: 蛮力枚举法 枚举回溯法程序流程图:算法的时间复杂度的分析:1)采用 8 重循环 时间复杂度为 8程序实现:1)void CEightqueDlg:OnButton1() /取自不同行的位置 count=0;for(que0=0;que0SetWindowText(out); count+; 2)void CEight2Dlg:OnCancel() int a8; int coun

3、t=0 CString aa,bb; aa=bb=“;for(a0=0;a0tempj)tempj=fj-i+qi; akj=i; for(j=0;j=0;i-) gaini=airest; rest=rest-gaini; CString result,aa;aa.Format(“%d“,gain0);result+=“A 厂分配“+aa+“台“;aa.Format(“%d“,gain1);result+=“B 厂分配“+aa+“台“;aa.Format(“%d“,gain2);result+=“C 厂分配“+aa+“台“;aa.Format(“%d“,f5);result+=“总利润是:“

4、+aa;MessageBox(result);结果:总结:实验题目:矩阵连乘问题分析:不同顺序的矩阵相乘运算,虽然运算结果相同,但所作的乘法次数差距很大。找到不同的组合方式下矩阵相乘的最少乘法次数,并用所得到的矩阵相乘的顺序计算矩阵相乘的结果。数学模型:动态规划的阶段是以相乘的矩阵的个数划分的;出事状态为一个矩阵相乘的计算量;第二阶段为两个矩阵相乘最后一个阶段,是 n 个矩阵相乘的情况。com记录矩阵相乘的结合方式;m记录乘法次数算法策略的选择:动态规划流程图:算法的时间复杂度:程序实现:void CMatrixDlg:OnButton1() /寻找乘机数最少的乘法int n,i,j; /n

5、为矩阵的个数CString cou,s1,s2,std;GetPrivateProfileString(“count“,“count“,“,cou.GetBuffer(MAX_PATH),MAX_PATH,“.Matrix.ini“);n=atoi(cou); /获取矩阵的个数for(i=0;i=0) return mij;if(i=j) return 0;if(i=j-1) comii+1=i; mij=ri*ri+1*ri+2; return mij; u=course(i,i)+course(i+1,j)+ri*ri+1*rj+1; comij=i;for(k=i+1;kj;k+) t=

6、course(i,k)+course(k+1,j)+ri*rk+1*rj+1;if(tu) u=t;comij=k; mij=u; return u;void CMatrixDlg:OnButton2() /实现量矩阵相乘CString cou; int c;GetPrivateProfileString(“count“,“count“,“,cou.GetBuffer(MAX_PATH),MAX_PATH,“.Matrix.ini“);c=atoi(cou); /获取矩阵的个数int W400,len,m,n,p,k=0; CString str,std,s1,s2,s3,buffer=“;f

7、or(int i=0;ic;i+)std.Format(“%d“,i);GetPrivateProfileString(std,“size1“,“,s1.GetBuffer(MAX_PATH),MAX_PATH,“.Matrix.ini“);GetPrivateProfileString(std,“size2“,“,s2.GetBuffer(MAX_PATH),MAX_PATH,“.Matrix.ini“);GetPrivateProfileString(std,“Mat“,“,str.GetBuffer(MAX_PATH),MAX_PATH,“.Matrix.ini“);str.Releas

8、eBuffer();len=str.GetLength();m=atoi(s1); n=atoi(s2);for(int j=0;jlen;j+) if(strj!=,) buffer+=strj;else Wk=atoi(buffer); buffer=“; k+; for(int t1=0;t1m;t1+)for(int t2=0;t2n;t2+)Mi.at1t2=Wn*t1+t2;Mi.s1=m; Mi.s2=n; JiSuan(0,c-1);CString result,aa,bb;for(int t1=0;t1M0.s1;t1+)for(int t2=0;t2M0.s2;t2+)bb

9、.Format(“%d“,M0.at1t2); aa+=bb+“ “; m_list.InsertString(t1,aa); aa=“;int CMatrixDlg:JiSuan(int a, int b) if(a=b-1) Double(a,b);else if(a=b) else JiSuan(a,comab); JiSuan(comab+1,b); Double(a,comab+1); return 1;void CMatrixDlg:Double(int a, int b) int buf2020;for(int t1=0;t120;t1+)for(int t2=0;t220;t2+) buft1t2=0;for(int i=0;iMa.s1;i+)for(int j=0;jMb.s2;j+)for(int k=0;kMa.s2;k+)bufij+=Ma.aik*Mb.akj;for(int t3=0;t3Ma.s1;t3+)for(int t4=0;t4Mb.s2;t4+)Ma.at3t4=buft3t4; Ma.s2=Mb.s2;结果:结论:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报