仙岛求药

少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由 M \times NM×N 个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。现在要求你来帮助他实现这个目标。

输入格式

第一行输入两个非零整数 MM 和 NN,两者均不大于 2020。MM 表示迷阵行数, NN 表示迷阵列数。

接下来有 MM 行, 每行包含 NN 个字符,不同字符分别代表不同含义:

  1. ‘@’:少年李逍遥所在的位置;2) ‘.’:可以安全通行的方格;3) ‘#’:有怪物的方格;4) ‘*’:仙药所在位置。

输出格式

输出一行,该行包含李逍遥找到仙药需要穿过的最少的方格数目(计数包括初始位置的方块)。如果他不可能找到仙药, 则输出 -1−1。

输出时每行末尾的多余空格,不影响答案正确性

样例输入1

8 8
.@##...#
#....#.#
#.#.##..
..#.###.
#.#...#.
..###.#.
...#.*..
.#...###

样例输出1

10

样例输入2

6 5
.*.#.
.#...
..##.
.....
.#...
....@

样例输出2

8

样例输入3

9 6
.#..#.
.#.*.#
.####.
..#...
..#...
..#...
..#...
#.@.##
.#..#.

样例输出3

-1

 

import java.util.LinkedList;
import java.util.Scanner; public class 仙岛求药 { static int N = 3000;//N需开大点
static int r,c;
static char[] [] map = new char[N][N];//用于保存地图
static boolean [] [] vis = new boolean[N][N];//标识是否访问过的点
static int [] []dir = {{-1,0},{1,0},{0,-1},{0,1}}; //四个方向坐标
static class node{
int x;
int y;
int step;
}
static node [] q = new node[N];
public static void bfs(int sx,int sy,int ex,int ey){
int head=1,tail=1;
boolean flag1 =true;
vis[sx][sy]=true;
node n = new node();
n.x=sx;
n.y=sy;
n.step=0;
q[tail]=n;
tail++;
while(head<tail){
int x = q[head].x;
int y = q[head].y;
int step = q[head].step;
if(x==ex&&y==ey) //终点则输出
{
flag1=false;
System.out.printf("%d\n",step);
break;
}
for(int i=0;i<4;i++){
int nx = x+ dir[i][0];
int ny = y +dir[i][1];
if(nx >= 0 && nx < r && ny >= 0 && ny < c && vis[nx][ny] == false && map[nx][ny] == '.'){
vis[nx][ny] = true;
node nn;
if (q[tail]==null){
nn =new node();
}
else {
nn = q[tail];
} nn.x = nx;
nn.y = ny;
nn.step = step+1;
q[tail]=nn;
tail++;
}
}
head++;
}
if(flag1)
System.out.printf("-1\n");
} public static void main(String[] args) {
int sx = 0,sy=0,ex=0,ey=0;
// while(scanf("%d%d",&r,&c) != EOF && (r||c))
Scanner sc = new Scanner(System.in);
r = sc.nextInt();
c = sc.nextInt();
for (int k=0;k<r;k++){ String s = sc.next();
map[k]=s.toCharArray();
}
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(map[i][j]=='@'){
sx=i;
sy=j;
}
if(map[i][j]=='*'){
ex=i;
ey=j;
map[i][j]='.';//修改为 点
}
}
bfs(sx,sy,ex,ey); } }

Java实现 计蒜客 1251 仙岛求药的更多相关文章

  1. noi 2727:仙岛求药

    2727:仙岛求药 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难 ...

  2. OpenJudge 2727 仙岛求药

    总时间限制:  1000ms 内存限制:  65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...

  3. AC日记——仙岛求药 openjude 2727

    仙岛求药 思路: bfs: 来,上代码: #include <cstdio> #include <cstring> #include <iostream> #inc ...

  4. Java实现 计蒜客 拯救行动

    拯救行动 公主被恶人抓走,被关押在牢房的某个地方.牢房用 N \times M (N, M \le 200)N×M(N,M≤200) 的矩阵来表示.矩阵中的每项可以代表道路(@).墙壁(#).和守卫( ...

  5. NOI 2727:仙岛求药 x

    总时间限制:  1000ms 内存限制:  65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发 ...

  6. 【bfs】仙岛求药

    [题目描述] 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由M×N个方格组成,有的 ...

  7. [OpenJudge] 2727 仙岛寻药

    2727:仙岛求药 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进 ...

  8. Java实现 POJ 2749 分解因数(计蒜客)

    POJ 2749 分解因数(计蒜客) Description 给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * - * an,并且1 < a1 <= ...

  9. 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)

    https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...

随机推荐

  1. vue 如何实现 Input 输入框模糊查询方法

    原理:原生js的indexOf() 方法,该方法将从头到尾地检索数组,看它是否含有对应的元素.开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时).如果找到一个 item, ...

  2. [zoj3627]模拟吧

    思路:情况只可能是2种,两个人一直向一边走,或者有一个人折回来,对于后一种,枚举折回来的位置就行了.不过要注意两个方向都要处理下. #pragma comment(linker, "/STA ...

  3. vue render 中遇到的问题

    以后遇到问题会持续更新 1 render中   判断是否显示 2 render中  属性可以通过判断的形式显示

  4. python --RecursionError: maximum recursion depth exceeded in comparison

    在学习汉娜塔的时候,遇到一个error RecursionError: maximum recursion depth exceeded in comparison 经过百度,百度的方法: 加上: i ...

  5. python监听、操作键盘鼠标库pynput详细教程

    § 0.0.0 前言 监听.操作鼠标.键盘是实现自动化的捷径,比如我实现自动化签到用到了模拟键盘操作. pynput是监听.操控鼠标和键盘的跨平台第三方python库. 你可以通过pip insnal ...

  6. 科技感满满,华为云DevCloud推出网页暗黑模式

    近期,华为云DevCloud推出了暗黑模式,让用户在网页端也可以体验到桌面级应用才有的特性.   深色模式(Dark Mode),俗称暗黑模式.是近2年以来用户呼声最高的功能之一,一些国外顶级厂商都将 ...

  7. sonar 安装,centos7配置优化

    /etc/sysctl.conf /etc/systemd/system.conf /etc/security/limits.conf /proc/sys/fs/file-max /etc/secur ...

  8. 【雕爷学编程】Arduino动手做(42)---PM2.5粉尘传感器

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  9. python3.x 基础三:set集合

    集合,set(),记住: 1个特点:去重,把列表变成集合,达到自动去重操作,无序 5个关系:测试两个列表的交差并子反向差集 方法: |  add(...) 常用,已存在元素去重不生效 |      A ...

  10. jquery.min.js v1.10.3版本autocomplete方法会在text前添加搜索出多少项的文本信息 要去除

    http://stackoverflow.com/questions/13011127/how-to-remove-change-jquery-ui-autocomplete-helper-text ...