杨陈


私信TA

用户名:yccc

访问量:13253

签 名:

等  级
排  名 80
经  验 9231
参赛次数 0
文章发表 64
年  龄 0
在职情况 学生
学  校 湖北生物科技职业学院
专  业

  自我简介:

参考代码:

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Node{//创建一个类
    int x;
    int y;
    int step;
}

public class 仙岛求药 {
    public static char[][] arr;//地图
    public static int[][] book;//判断是否走过
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()) {
            int n=scanner.nextInt();
            int m=scanner.nextInt();
            if (n==0&&m==0) {
                return;
            }
            int[][] f={{1,0},{0,-1},{0,1},{-1,0}};//控制方向
            arr=new char[n][m];
            book=new int[n][m];
            Queue<Node> que=new LinkedList<Node>();//创建一个先入先出的队列
            for (int i = 0; i < arr.length; i++) {
                String str=scanner.next();
                for (int j = 0; j < arr[0].length; j++) {
                    arr[i][j]=str.charAt(j);
                    if(arr[i][j]=='@'){
                        Node q=new Node();
                        q.x=i;
                        q.y=j;
                        q.step=0;
                        que.add(q);//入队
                        book[q.x][q.y]=1;
                    }
                }
            }
            int sum=0;
            while (que.size()!=0) {//当队列为空时退出循环 代表所有点都已经走过了
                Node d=que.poll();//弹出队列顶部并删除
                if (arr[d.x][d.y]=='*') {
                    sum=d.step;
                    break;
                }
                for (int i = 0; i < 4; i++) {
                    int mx=d.x+f[i][0];
                    int my=d.y+f[i][1];
                    if (mx>=0&&mx<arr.length&&my>=0&&my<arr[0].length&&book[mx][my]==0&&arr[mx][my]!='#') {//判断边界 并且要这个点没有走过且不为墙
                        book[mx][my]=1;//如果能走通就将他标记 并将这个点放入队列
                        Node x=new Node();
                        x.x=mx;
                        x.y=my;
                        x.step=d.step+1;
                        que.add(x);
                    }
                }
            }
            if (sum==0) {
                System.out.println(-1);
            }else {
                System.out.println(sum);
            }
            
            
        }
    }

}


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区