武士风度的牛(tyvj1074)

来源:互联网 发布:网络维护费用 编辑:程序博客网 时间:2024/06/10 06:21
 

武士风度的牛

背景 Background

农民John有很多牛,他想交易其中一头被Don称为The Knight的牛。这头牛有一个独一无二的超能力,在农场里像Knight一样地跳(就是我们熟悉的象棋中马的走法)。虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个x,y的坐标图来表示。

描述 Description

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了The Knight的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。现在你的任务是,确定The Knight要想吃到草,至少需要跳多少次。The Knight的位置用'K'来标记,障碍的位置用'*'来标记,草的位置用'H'来标记。

这里有一个地图的例子:
       11 | . . . . . . . . . .
       10 | . . . . * . . . . .
        9 | . . . . . . . . . .
        8 | . . . * . * . . . .
        7 | . . . . . . . * . .
        6 | . . * . . * . . . H
        5 | * . . . . . . . . .
        4 | . . . * . . . * . .
        3 | . K . . . . . . . .
        2 | . . . * . . . . . *
        1 | . . * . . . . * . .
        0 ----------------------
                  1
        0 1 2 3 4 5 6 7 8 9 0

The Knight 可以按照下图中的A,B,C,D...这条路径用5次跳到草的地方(有可能其它路线的长度也是5):
       11 | . . . . . . . . . .
       10 | . . . . * . . . . .
        9 | . . . . . . . . . .
        8 | . . . * . * . . . .
        7 | . . . . . . . * . .
        6 | . . * . . * . . . F<
        5 | * . B . . . . . . .
        4 | . . . * C . . * E .
        3 | .>A . . . . D . . .
        2 | . . . * . . . . . *
        1 | . . * . . . . * . .
        0 ----------------------
                  1
        0 1 2 3 4 5 6 7 8 9 0 

输入格式 Input Format

第一行: 两个数,表示农场的列数(<=150)和行数(<=150)

第二行..结尾: 如题目描述的图。

输出格式 Output Format

一个数,表示跳跃的最小次数。

样例输入 Sample Input

10 11
..........
....*.....
..........
...*.*....
.......*..
..*..*...H
*.........
...*...*..
.K........
...*.....*
..*....*..
样例输出 Sample Output

5
===================

宽搜

注意一个问题,行列是否相反.

===================

const  dx:array[1..8]of longint=(1,2, 2, 1,-1,-2,-2,-1);  dy:array[1..8]of longint=(2,1,-1,-2,-2,-1, 1, 2);var  map:array[-2..153,-2..153]of char;    //开始在这里定义地图时没注意,最后下标越界了...  m,n:longint;  x1,y1,x2,y2:longint;  h:array[0..22500,1..3]of longint;procedure init;begin  assign(input,'p1074.in');  assign(output,'p1074.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 8 do      begin        x_:=h[l,1]+dx[i];        y_:=h[l,2]+dy[i];        if map[x_,y_]<>'*' then          begin            if (x_=x2) and (y_=y2) then              begin                writeln(h[l,3]+1);                terminate;              end;            map[x_,y_]:='*';            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:=-2 to 153 do    for j:=-2 to 153 do      map[i,j]:='*';  for i:=1 to m do    begin      for j:=1 to n do        begin          read(map[i,j]);          if map[i,j]='K' then            begin              x1:=i; y1:=j;            end;          if map[i,j]='H' then            begin              x2:=i; y2:=j;            end;        end;      readln;    end;  {for i:=1 to m do    begin      for j:=1 to n do        write(map[i,j]);      writeln;    end;}  bfs;end;begin  init;  main;  terminate;end.


 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 法国第一年语言没有通过怎么办 听力42天未通过怎么办 7岁儿童叛逆期怎么办 被忽视型幼儿该怎么办 言语发育障碍脑神经损伤怎么办 5岁幼儿胆子小怎么办 幼儿20天胆子小怎么办 两岁宝宝胆子小怎么办 两岁的宝宝胆子小怎么办 孕中期发烧38度怎么办 小班社会交往教案有垃圾怎么办 两个月婴幼儿哭闹入睡难怎么办 8岁儿童睡觉困难怎么办 做精细动作手抖怎么办 15个月宝宝缺锌怎么办 八个月宝宝有蛔虫怎么办 两个月婴儿缺锌怎么办 婴儿天热出汗多尿少怎么办 婴儿5个月不主动抓东西怎么办 打疫苗吃了辣怎么办 四个月宝宝枕秃怎么办 四个月的孩子缺钙怎么办 小孩张牙齿会发烧怎么办 对节白蜡叶子干了怎么办 刷机字库坏了怎么办 魅蓝返回键失灵怎么办 牙蛀严重且牙根松动怎么办 蛀牙伤到神经了怎么办 给客户发错邮件怎么办外贸 cf没有枪声和脚步声怎么办 穿越火线fps太低怎么办 win10玩cf没有声音怎么办 儿子死了欠的钱怎么办 儿子欠银行的钱怎么办 惹了社会上的混混怎么办 我是五年级惹上混混怎么办 孩子挨欺负家长怎么办幼儿园 孩子被同学欺负不敢上学怎么办 孩子被欺负不敢还手怎么办 2个月的婴儿内热怎么办 孩子把别人打了怎么办