jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
阅读:715回复:6

同时懂C和PASCAL的水友请进来帮个忙(有分!)(问题已解决)

楼主#
更多 发布于:2004-01-07 16:51
如下问题,请把vb的代码帮忙翻译成c或c++的代码,谢谢 :D

(八数码问题) 8个编有数码1 ̄8的滑牌,能在3*3的井字格中滑动。井

 字格中有一格是空格,用0表示,因而空格周围的数码滑牌都可能滑到空格中去.        

 下图是数码滑牌在井字格中的两种状态:                                            

         ┎─┬─┬─┒                        ┏━┯━┯━┓                    

         ┃2 │8 │3 ┃                        ┃1 │2 │3 ┃                    

         ┠─┼─┼─┨                        ┠─┼─┼─┨                    

         ┃1 │6 │4 ┃     ---->         ┃8 │0 │4 ┃                    

         ┠─┼─┼─┨                        ┠─┼─┼─┨                    

         ┃7 │0 │5 ┃                        ┃7 │6 │5 ┃                    

         ┗━┷━┷━┛                        ┗━┷━┷━┛                    

            初始状态                              目标状态                      

 以左图为初始状态,右图为目标状态,请找出从初始状态到目标状态的滑牌移步序        

 列,具体要求:                                                                  

    (1)输入初始状态和目标状态的数据;                                        

       a、分别用两行输入上述两项数据:                                          

       b、对输入数据应有查错和示错功能;                                        

    (2)实现从初始状态到目标状态的转换(如不能实现,程序应输出不能实现        

 的提示信息);                                                                  

    (3)输出结果,每移动一步都必须在屏幕上显示:                                

       a、移动每一步时的序号,最后一步的序号即为移动总步数;                    

       b、每一步移动后以3*3表格形式显示状态。                                

    (4)要求能使移动步数尽可能少;                                            

 

program lxw020;

  uses crt;

  type a33=array [1..3,1..3] of byte;

       a4=array [1..4] of shortint;

       node=record

         ch:a33;

         si,sj,pnt,dep:byte;

       end;

  const goal:a33=((1,2,3),(8,0,4),(7,6,5));

        start:a33=((2,8,3),(1,6,4),(7,0,5));

        di:a4=(0,-1,0,1);

        dj:a4=(-1,0,1,0);

  var data: array [1..100] of node;

      temp:node;

      k,r,ni,nj,closed,open,depth:integer;

function check(k:integer):boolean;

  begin

    check:=false;

    ni:=temp.si+di[k]; nj:=temp.sj+dj[k];

    if(ni in[1..3])and(nj in[1..3]) then check:=true;

    if(ni=data[temp.pnt].si)and(nj=data[temp.pnt].sj)

      then check:=false;

  end;

function dupe:boolean;

  var i,j,k: integer;

      buf:boolean;

begin

  buf:=false; i:=0;

  repeat

    inc(i); buf:=true;

    for j:=1 to 3 do

      for k:=1 to 3 do

        if data.ch[j,k]<>data[open].ch[j,k]

          then buf:=false;

  until buf or (i>=open-1);

  dupe:=buf;

end;

function goals:boolean;

  var i,j:integer;

begin

  goals:=true;

  for i:=1 to 3 do

    for j:=1 to 3 do

      if data[open].ch[i,j]<>goal[i,j]

        then goals:=false;

end;

procedure print;

  var buf: array [1..100] of integer;

      i,j,k,n:integer;

begin

  n:=1;  i:=open;    buf[1]:=i;

  repeat

    j:=data.pnt;

    inc(n); buf[n]:=j; i:=j;

  until i=0;

  writeln(\'steps:\',depth-1);

  for i:=1 to 3 do

    begin

      for k:=n-1 downto 1 do

        begin

          for j:=1 to 3 do

            write(data[buf[k]].ch[i,j]);

          if i=2 then write(\'->\') else write(\'  \');

        end;

      writeln;

    end;

    readln;   halt;

end;

begin{main}

  closed:=0;  open:=1;

  with data[1] do

  begin

    ch:=start;  si:=3;  sj:=2;

    pnt:=0;  dep:=0;

  end;

  repeat

  inc(closed);  temp:=data[closed];

  depth:=temp.dep;

  for r:=1 to 4 do

    if check(r) then

      begin

        inc(open);

        data[open]:=temp;

        with data[open] do

          begin

            ch[si,sj]:=ch[ni,nj];

            ch[ni,nj]:=0;  si:=ni;  sj:=nj;

            pnt:=closed; dep:=depth+1;

          end;

        if dupe then dec(open)

           else if goals then print;

      end;

  until closed>=open;

  writeln(\'no solution!\'); readln

end.



[编辑 -  1/7/04 by  jinghuiren]

[编辑 -  1/7/04 by  jinghuiren]

[编辑 -  1/7/04 by  jinghuiren]
guoxh9
驱动太牛
驱动太牛
  • 注册日期2003-10-13
  • 最后登录2011-10-14
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-07 17:53
不懂顶
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-07 20:52
这么快就沉底了!!!
顶一下!
ChiefJustice
驱动牛犊
驱动牛犊
  • 注册日期2004-01-07
  • 最后登录2004-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-07 21:33
楼主贴的明明是 PASCAL 的代码嘛。。。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-07 23:10
楼主贴的明明是 PASCAL 的代码嘛。。。

PASCAL????
我同学告诉我是vb,靠,被骗了!
那你能帮忙翻译一下吗?
多谢多谢。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-07 23:11
楼主贴的明明是 PASCAL 的代码嘛。。。

已经更正了,各位多帮忙呀。
定重谢!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-07 23:24
算了,我已经找到相应的vc程序的源代码,不用翻译了。 :D
游客

返回顶部