主题:请大家帮忙一下,帮者加分!!
54321
[专家分:20] 发布于 2006-02-22 22:46:00
在N*N(8*8)的国际象棋上放置一个马,然后采用象棋中"马走日字"的规则,要求这个马能不重复地走完8*8个格子
请编程解决此问题,用PASCAL语言
回复列表 (共1个回复)
沙发
贺天行宝 [专家分:2300] 发布于 2006-02-23 21:34:00
sorry,我没时间了,这程序好像有错,你看看吧
var
a:array[-2..10,-2..10]of boolean;
i,j,k,l,n:integer;
procedure dp(i,j:integer);
begin
if (i=8)and(j=8) then begin inc(n); exit; end;
if a[i-2,j-1] then begin a[i-2,j-1]:=false; dp(i-2,j-1); a[i-2,j-1]:=true; end;
if a[i-2,j+1] then begin a[i-2,j+1]:=false; dp(i-2,j+1); a[i-2,j+1]:=true; end;
if a[i-1,j-2] then begin a[i-1,j-2]:=false; dp(i-1,j-2); a[i-1,j-2]:=true; end;
if a[i+1,j-2] then begin a[i+1,j-2]:=false; dp(i+1,j-2); a[i+1,j-2]:=true; end;
if a[i+2,j-1] then begin a[i+2,j-1]:=false; dp(i+2,j-1); a[i+2,j-1]:=true; end;
if a[i+2,j+1] then begin a[i+2,j+1]:=false; dp(i+2,j+1); a[i+2,j+1]:=true; end;
if a[i+1,j+2] then begin a[i+1,j+2]:=false; dp(i+1,j+2); a[i+1,j+2]:=true; end;
if a[i-1,j+2] then begin a[i-1,j+2]:=false; dp(i-1,j+2); a[i-1,j+2]:=true; end;
end;
begin
fillchar(a,sizeof(a),false);
n:=0;
for i:=1 to 8 do for j:=1 to 8 do a[i,j]:=true;
dp(1,1);
writeln(n);
end.
我来回复