最新公告
  • 欢迎光临可关玩日记,免费分享生活知识及创业资讯
  • 求FP八数码难题程序编码

    求FP八数码难题程序编码

    用BFS 再加上HASH判重就可以了

    代码可能丑了点… 但绝对能用 o(∩_∩)o

    const

    c;array [0..2,1..4] of integer=((3,-3,-1,0),(3,-3,1,0),(-3,3,-1,1));

    var

    hash;array[1..900000] of boolean;

    f;array[1..100000] of string;

    d;array[1..100000] of longint;

    s,e,i,p1,p2,h,c1;longint;

    t;char;

    p,te;string;

    begin

    readln(p);

    f[1];=’123804765′;

    d[1];=0;

    s;=1;

    e;=1;

    repeat

    p1;=pos(‘0’,f[s]);

    c1;=p1 mod 3;

    for i;=1 to 4 do

    begin

    p2;=p1+c[c1,i];

    if (p2>0) and (p2<10) then

    begin

    te;=f[s];

    t;=te[p2];

    te[p2];=te[p1];

    te[p1];=t;

    val(te,h);

    h;=h mod 99983;

    if hash[h]=false then

    begin

    hash[h];=true;

    e;=e+1;

    f[e];=te;

    d[e];=d[s]+1;

    end;

    if te=p then

    begin

    writeln(d[e]);

    halt;

    end;

    end;

    end;

    s;=s+1;

    until s>e;

    end.