校园迷宫(rqnoj195)

来源:互联网 发布:网络写手新手指南 编辑:程序博客网 时间:2024/05/17 03:26

 校园迷宫

题目描述

总算期中考了,鄙人被教育局分配到了SY学校,当然是陪着很多人的。不知转了多少次车,总算到了。可惜的是,SY学校整个像个迷宫一样,就在门口贴了张学校地图。鄙人就开始研究地图了,但是学校错综复杂,等找到目的地,早就开考了。为此,鄙人取出随身携带的微型电脑(不知道从哪来的),向网上发去了求助书。注:只能往4个方向走:上、下、左、右。

输入格式

第1行,二个数,N,M。
接下来是一个N*M的矩阵,表示这个学校。(有N行,M列)。矩阵由2个数字组成。0:路;1:墙。路能走,墙不能走(这是基本常识。不过还是提醒一下,不然哪个牛又要飞檐走壁了)。
再是2行,第1行2个数X1,Y1表示校门口的坐标(即校门口在矩阵的第X1行,第Y1列)。第2行2个数X2,Y2表示鄙人的考场的坐标(即校门口在矩阵的第X2行,第Y2列)。
数据范围:0<M,N<=2000。0〈X1,X2〈=N,0〈Y1,Y2〈=M。

输出格式

一个数,表示最少要走的步数。如果走不到,则输出 No Answer!

样例输入

5 5
1 1 1 1 1
1 1 1 0 0
1 0 0 0 1
0 0 1 0 0
1 1 1 0 1
4 1
5 4

样例输出

6

===========

宽搜基本题目

===========

 

const  dx:array[1..4]of longint=(1,-1,0,0);  dy:array[1..4]of longint=(0,0,-1,1);var  n,m:longint;  map:array[0..2001,0..2001]of integer;  h:array[0..4000000,1..3]of longint;  x1,y1,y2,x2:longint;procedure init;begin  assign(input,'t195.in');  assign(output,'t195.out');  reset(input); rewrite(output);end;procedure terminate;begin  close(input); close(output);  halt;end;procedure bfs;var  l,r:longint;  i:longint;  x_,y_:longint;begin  l:=0; r:=1;  h[1,1]:=x1; h[1,2]:=y1; h[1,3]:=0;  repeat    inc(l);  // l:=l mod 22500;    for i:=1 to 4 do      begin        x_:=h[l,1]+dx[i];        y_:=h[l,2]+dy[i];        if map[x_,y_]<>1 then          begin            if (x_=x2) and (y_=y2) then              begin                writeln(h[l,3]+1);                terminate;              end;            map[x_,y_]:=1;            inc(r);   //         r:=r mod 22500;            h[r,1]:=x_; h[r,2]:=y_; h[r,3]:=h[l,3]+1;          end;      end;  until l>=r;end;procedure main;var  i,j:longint;begin  readln(n,m);  for i:=0 to n+1 do    for j:=0 to m+1 do      map[i,j]:=1;  for i:=1 to n do    for j:=1 to m do      read(map[i,j]);        readln(x1,y1);  readln(x2,y2);  bfs;  writeln('No Answer!');end;begin  init;  main;  terminate;end.


原创粉丝点击