问题标题: 1257迷宫寻宝怎么写


2
已采纳
曾凡一
曾凡一
新手光能
新手光能

先把把1051迷宫问题(迷宫问题是学习搜索最基本的题,不会就别做迷宫寻宝了)里面的步数(sum)一开始赋值999

99,再把search(int c,int r)换成search(int c,int r,int t),在调用的时候search(起始点行,起始点列

,0),把地图录入a[][]二维数组。

接下来把search函数里判断当前已经走到宝藏点的时候本来是sum++现在改成判断t是不是小于sum,如果小于,则记

录。

if(c==宝藏点行&&r==宝藏点列)
{
    if(t<sum) sum=t;
    return ;
}

然后else里的for循环里的继续搜索search(下一步行,下一步列)换成search(下一步行,下一步列,t+1)。

这样就完成了。

0
0
0
黄昊轩
黄昊轩
新手守护
新手守护

var
    i,nx,ny:longint;
begin
    if (x=zx) and (y=zy) then
    begin
        if k<min then min:=k;          
        exit;
    end;
    for i:=1 to 4 do       
    begin
        nx:=x+l[i,1];
        ny:=y+l[i,2];
        if (nx>=1) and (nx<=9) and (ny>=1) and (ny<=9) and (a[nx,ny]=0) and (b[nx,ny]=false) then
        begin
            b[nx,ny]:=true;
            inc(k);      
            cmp(nx,ny);
            dec(k);        
            b[nx,ny]:=false;
        end;
    end;
end;

0
0
叶卓舒
叶卓舒
初级守护
初级守护

1051迷宫问题会写吧? (这个不会写那迷宫寻宝就别想了。。。)

搜索回溯过程主体:

procedure cmp(x,y:longint);
var
    i,nx,ny:longint;
begin
    if (x=zx) and (y=zy) then
    begin
        if k<min then min:=k;            //min初值定义成maxlongint;min是记录最少步数的
        exit;
    end;
    for i:=1 to 4 do        //遍历4个方向
    begin
        nx:=x+l[i,1];
        ny:=y+l[i,2];
        if (nx>=1) and (nx<=9) and (ny>=1) and (ny<=9) and (a[nx,ny]=0) and (b[nx,ny]=false) then
        begin
            b[nx,ny]:=true;
            inc(k);        //k是记录步数的
            cmp(nx,ny);
            dec(k);        //回溯时k要减1
            b[nx,ny]:=false;
        end;
    end;
end;

0
叶卓舒
叶卓舒
初级守护
初级守护

1051迷宫问题会写吧? (这个不会写那迷宫寻宝就别想了。。。)

搜索回溯过程主体:

procedure cmp(x,y:longint);
var
    i,nx,ny:longint;
begin
    if (x=zx) and (y=zy) then
    begin
        if k<min then min:=k;            //min初值定义成maxlongint;min是记录最少步数的
        exit;
    end;
    for i:=1 to 4 do        //遍历4个方向
    begin
        nx:=x+l[i,1];
        ny:=y+l[i,2];
        if (nx>=1) and (nx<=9) and (ny>=1) and (ny<=9) and (a[nx,ny]=0) and (b[nx,ny]=false) then
        begin
            b[nx,ny]:=true;
            inc(k);        //k是记录步数的
            cmp(nx,ny);
            dec(k);        //回溯时k要减1
            b[nx,ny]:=false;
        end;
    end;
end;

0
张希晨
张希晨
修练者
修练者
先把把1051迷宫问题(迷宫问题是学习搜索最基本的题,不会就别做迷宫寻宝了)里面的步数(sum)一开始赋值999
99,再把search(int c,int r)换成search(int c,int r,int t),在调用的时候search(起始点行,起始点列
,0),把地图录入a[][]二维数组。
接下来把search函数里判断当前已经走到宝藏点的时候本来是sum++现在改成判断t是不是小于sum,如果小于,则记
录。
if(c==宝藏点行&&r==宝藏点列)
{
    if(t<sum) sum=t;
    return ;
}
然后else里的for循环里的继续搜索search(下一步行,下一步列)换成search(下一步行,下一步列,t+1)。
这样就完成了。

 

0
我要回答