回 帖 发 新 帖 刷新版面

主题:请大家帮忙一下,帮者加分!!

在N*N(8*8)的国际象棋上放置一个马,然后采用象棋中"马走日字"的规则,要求这个马能不重复地走完8*8个格子
请编程解决此问题,用PASCAL语言

回复列表 (共1个回复)

沙发

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.

我来回复

您尚未登录,请登录后再回复。点此登录或注册