回 帖 发 新 帖 刷新版面

主题:小鼠走迷宫,非递归怎么解?

【问题描述】小鼠a与小鼠b身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿上,下,左,右4个方向进入未封闭的房间。小鼠a位于迷宫的(p,q)方格中,它必须找出一条通向小鼠b所在的(r,s)方格的路。请帮助小鼠a找出所有通向小鼠b的最短道路。

输入:输入数据第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2行,每行也有2个正整数,分别表示小鼠a所处的方格(p,q)和小鼠b所处的方格(r,s)。
输出:小鼠a通向小鼠b有多少条不同的最短路。如果小鼠a无法通向小鼠b则输出“NoSolution!”。
提示:采用广度优先搜索解决本题。二维数组g存储最短路长度,二维数组tot存储最短路条数。

【输入输出样例】
输入:8  8  4     输出:8
      1  2
      3  7
      5  5
      8  2
      3  3
      6  6    

program ex6;
const
  dis:array[0..3,0..1] of integer=((0,-1),(0,1),(1,0),(-1,0));
var
  n,m,k,q,p,r,s:integer;
  g,tot:array[0..200,0..200] of integer;
  list:array[0..40000,0..1] of integer;
  op,cl:integer;
  i,j,t,x,y,nx,ny,step:longint;
  finish:boolean;
begin
  readln(n,m,k);
  fillchar(g,sizeof(g),0); fillchar(tot,sizeof(tot),0);
  finish:=false;
  for t:=0 to k-1 do begin
    readln(i,j);
    ____________
  end;
  readln(p,q); readln(r,s);
  c1:=1; op:=1;
  list[1,0]:=p; list[1,1]:=q;
  tot[p,q]:=1; step:=999999;
  while (______) do begin
    x:=list[c1,0]; y:=list[c1,1];
    for i:=0 to 3 do begin
      nx:=x+dis[i,0]; ny:=y+dis[i,1];
      if (nx<=0) or (nx>n) or (ny<=0) or (ny>m) then continue;
      if (g[nx,ny]= -1) then continue;
      if (tot[nx,ny]<>0) then begin
        _________
        continue;
      end;
      inc(op);
      list[op,0]:=nx; list[op,1]:=ny;
      ____________
      tot[nx,ny]:=tot[nx,ny]+tot[x,y];
      if (nx=r) and (ny=s) then begin
        step:=g[nx,ny];
      end;
      if (________) then begin
        writeln(tot[r,s]);
        finish:=true;
        break;
      end;
    end;
    inc(c1);
    if (finish)  then break;
  end;
  if (not finish) then writeln(_________);
end.

回复列表 (共4个回复)

沙发

上题详图是http://218.4.165.132/oj/ShowProblem?problemid=c007[url=http://218.4.165.132/oj/ShowProblem?problemid=c007]http://218.4.165.132/oj/ShowProblem?problemid=c007[/url]

板凳

试试[url=http://www.hainann.com][color=black]开传奇私服[/color][/url]!!!

3 楼

太。。。太。。。太难了吧!!!

4 楼

有人回答一下吗。
1.g[i,j]:=-1
2.c1<op
3 填不出
4.g[nx,ny]:=g[x,y]+1
5。填不出
6.nosolution

不知道这样对不对。

我来回复

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