回 帖 发 新 帖 刷新版面

主题:[讨论]骑士游历问题

在n*n的国际象棋棋盘的某一位置(p,q)有一个马,用“马走日字”的规则,要求它不重复地走完所有格子。
输入:
n p q
输出:
一个n*n的矩阵,表示每个格子是第几个走到。


我的程序怎么错了??

Program p260;
  type
     btype=array[1..100,1..100]of integer;
     atype=array[1..8,1..2]of integer;
  const a:atype=((-2,1),(-2,-1),(-1,-2),(1,-2),(2,-1),(2,1),(1,2),(-1,2));
  var
     n,sqn,i,k,p,q:integer;
     b:btype;
  procedure work(b:btype;i,p,q:integer);
    var
       p1,q1,k:integer;
    procedure print;
      var
         i,j:integer;
      begin
         for i:=1 to n do
           begin
             for j:=1 to n do
               write(b[i,j],' ');
             writeln;
           end;
      end;
    begin
      if i=sqn+1 then begin print;halt;end;
      k:=0;
      repeat
        inc(k);
        p1:=p+a[k,1];
        q1:=q+a[k,2];
        if (p1>0)and(p1<=n)and(q1>0)and(q1<=n)and(b[p1,q1]=0) then begin
              b[p1,q1]:=i;
              work(b,i+1,p1,q1);
                             end
      until (k=8);
      if i=2 then writeln('no solution!');
    end;
  procedure init;
    begin
     readln(n);
     readln(p,q);
     sqn:=sqr(n);
     b[p,q]:=1;i:=2;
    end;
  begin
     init;
     work(b,i,p,q);
end.

感激!!

回复列表 (共1个回复)

沙发


不会这道小题就难住你们了??难道就没有高手吗??
帮助别人查找错误对自己也是一种提高啊!!

我来回复

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