回溯算法完善程序练习题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

回溯算法完善程序练习题

【题1:围棋子的移动】有N对黑白棋子并排在一起,如:○○○○○○○○●●●●●●●●,(N=8)。

移动规则:移动相邻两个棋子至空位,移动是必须跳过若干个棋子。移动N次后变成黑白相间:○●○●○●○●○●○●○●○●.

输入n,输出样子移动方案和移动步数。

分析:n=4开始看,初始时:

○○○○●●●●

第1步:○○○——●●●○●(—表示空位)4→8+1

第2步:○○○●○●●——●8→4

第3步:○——●○●●○○●2→8

第4步:○●○●○●——○●7→2

第5步:——○●○●○●○●1→7

n=5时,初始时:

○○○○○●●●●●

第1步:○○○○——●●●●○●

第2步:○○○○●●●●——○●这样,n=5的问题就转化成了n=4的情况。

n=6时,是不是可以转换为5的问题?

……,

以此类推,对于一个规模为n的问题,可以把它转化成了规模为n-1的子问题。并且最终都将可以使其转换成为n=4的情况,因而n=4是边界重点特别处理的情况。

数据结构如下:数组b[1..maxn]用来作为棋子移动的场所,初始时,c[1]~c[n]存放白子,c[n+1]~c[2n]存放黑子,c[2n+1],c[2n+2]为空位置。最后结果在c[3]~c[2n+2]中。pt用来指向移动点的位置const maxn=1000;

var b:array[1..maxn]of char;

pt,i,n,num:integer;

procedure print;

var i:integer;

begin

___________________; write('step',num:2,':');

for i:=1 to 2*(n+1) do write(b[i]); writeln;

end;

procedure move(k:integer);

var i:integer;

begin

pt:=k; print;

end;

procedure mv(n:integer);

begin

if _________then begin

move(4); move(8); move(2); move(7); move(1);

end

else begin

move(n); move(2*n-1); print;_________________;

end;

end;

begin

readln(n);

for i:=1 to n do b[i]:='o';

for i:=n+1 to 2*n do b[i]:='*';

b[2*n+1]:='-'; b[2*n+2]:='-'; pt:=2*n+1; num:=__________;

print;

mv(n);

end.

【题2:特殊错位探索】

部分元素在自然位,部分元素错位的排列问题,往往加上一些特定的限制错位条件。例如,在1—n的全排列中,展示偶数在其自然位而奇数全错位的所有排列。

var n:integer;

a:array[1..10] of integer;

b:array[1..10] of boolean; {记录数字是否可用}

procedure try(t:integer);

var i:integer;

begin

if (t > n -1) then begin {输出解}

for i:=1 to n do write(a[i]); writeln; exit; end;

else for i:=1 to trunk(n/2+0.6) do

if _______________ then begin

a[t]:=i*2-1; b[i*2-1]:=true;

try(t+2);

b[i*2-1]:=false;

end;

end;{try}

begin

readln(n);

fillchar(b,sizeof(b),false); for i:=1 to n div 2 do begin b[i*2]:=true; a[i*2]:=i*2;;end;

try(1);

end.

程序运行示例

输入:9

321476985 321496587 325416987 325476981 325496187

327416985 327496185 327496581 329416587 329476185

329476581 521436987 521476983 521496387 527416983

527436981 527496183 527496381 529416387 529436187

529476183 529476381 721436985 721496385 721496583

725416983 725436981 725496183 725496381 729416385

729416583 729436185 729436581 921436587 921476385

921476583 925416387 925436187 925476183 925476381

927416385 927416583 927436185 927436581

s=44

考察输出的解,所有偶数都在自然位,所有奇数都错位。

相关文档
最新文档