day2穷举及其优化-杨志军范例.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
b[1]:=7; b[3]:=1; b[6]:=8; b[8]:=2; for b2:=3 to 6 do for b4:=3 to 6 do if b2b4 then for b5:=3 to 6 do if (b5b2) and (b5b4) then begin b[2]:=b2; b[4]:=b4; b[5]:=b5; b[7]:=18-b2-b4-b5; flag:=true; for i:=1 to 6 do if abs(b[a[i,1]]-b[a[i,2]])=1 then flag:=false; if flag then 输出答案; end; 优化二:增加约束条件 【例6】4皇后问题 在4×4的棋盘上放置4个皇后,要求任意两个皇后不在同一行、不在同一列、不在同一对角线上,输出所有的方案。 【分析】 定义一个一维数组,数组的下标是皇后所在位置的行数,数组元素的值是皇后所在位置的列数。我们可以在数组中穷举这4个数的各种可能值,然后去判断是否符合题目的要求(即不在一列、不在两个对角线上)。 procedure p(x:longint); begin if x4 then 如果符合条件,那么输出方案 else for i:=1 to 4 do begin a[x]:=i; p(x+1); end; end; 【分析】 穷举的数组值: 1111、1112、1113、1114、 1121、1122、1123、1124、 1131、1132、1133、1134、 1141、1142、1143、1144、 …… …… 4441、4442、4443、4444。 256个 procedure p(x:longint); begin if x4 then 如果符合条件,那么输出方案 else for i:=1 to n do if b[i]=0 then begin b[i]:=1; a[x]:=i; p(x+1); b[i]:=0; end; end; procedure p(x:longint); begin if x4 then 如果符合条件,那么输出方案 else for i:=1 to n do if b[i]=0 then begin b[i]:=1; a[x]:=i; p(x+1); b[i]:=0; end; end; 如何判断是否符合条件: function check:boolean; var i,j:longint; flag:boolean; begin flag:=true; for i:=1 to 3 do for j:=i+1 to 4 do if (a[i]=a[j]) or (abs(i-j)=abs(a[i]-a[j])) then flag:=false; check:=flag; end; 【分析】 穷举的数组值: 1234、1243、1324、1342、 1423、1432、2134、2143、 2314、2341、2413、2431、 …… …… 4213、4231、4312、4321。 24个 回溯法: 从问题的某种可能情况出发,搜索所有能到达的可能情况,然后以其中一种可能的情况为新的出发点,继续向下探索,当所有可能情况都探

文档评论(0)

4477769 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档