每日一题 走迷宫

1.题目解析 

走迷宫_牛客题霸_牛客网 
 


 一个矩阵里面.表示路,*代表墙,指定一个起点和一个终点,让你求起点到终点为止的最小路径是什么

2.思路分析

题目解析: 
        主要使用搜索类算法,使用宽度优先遍历dfs: 对于所有可做的路径我都走一遍,并且通过一个vis数组记录一下从终点走到此位置用了多少步,直接返回第一次走到终点此时存的步数即可,因为没遇到墙淘汰的,每次都是同时移动一步的,第一次到达的绝对是最小的。

3.代码实现 

package study2.day27;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

//走迷宫
public class Main {
    //以i为开头的最短路径    不对这种思想应该使用bfs 宽度优先遍历 找出所有从终点上面走到终点的位置第一个到达就是
    //每次各个方向都走一步,到达*结束,有一个到达后结束,第一个到达的肯定是最小路径
    private static int n, m, x1, y1, x2, y2;
    private static  char[][] arrs;
    private static  int[][] vis;
    static int[] dx = {0,0,1,-1};
    static int[] dy = {1,-1,0,0};

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        arrs = new char[n + 1][m + 1];
        vis = new int[n + 1][m + 1];
        x1 = sc.nextInt();y1 = sc.nextInt();
        x2 = sc.nextInt();y2 = sc.nextInt();
        for (int i = 1; i <= n; i++) {
            String temp = sc.next();
            for (int j = 1; j <= m; j++) {
                arrs[i][j] = temp.charAt(j - 1);
            }
        }
        System.out.println(bfs());
    }

    private static int bfs() {
        if (arrs[x2][y2] == '*') return -1;

        //1.标记刚开始每个位置都没有搜索过
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                vis[i][j] = -1;
            }
        }
        Queue<int[]> queue = new LinkedList<>();//队列
        //2.起点加入队列
        queue.add(new int[]{x1,y1});
        vis[x1][y1] = 0;//初始化起点
        while(!queue.isEmpty()){
            int[] t = queue.poll();
            int a = t[0],b = t[1];
            for (int i = 0; i < 4; i++) {//上下左右四个方向搜索
                int x = a + dx[i];
                int y = b + dy[i];//坐标
                if (x >= 1 && x <= n && y >= 1 && y <= m && vis[x][y] == -1 && arrs[x][y] == '.'){
                    queue.add(new int[]{x,y});
                    vis[x][y] = vis[a][b] + 1;
                    if (x == x2 && y == y2) return vis[x][y];
                }
            }
        }
        return -1;
    }
}

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
概要设计 - 走迷宫游戏 1. 引言 走迷宫游戏是一款基于图形化界面的休闲游戏,旨在提供一种娱乐方式,通过解决迷宫问题来挑战自己的智力和反应能力。游戏的目标是通过迷宫,到达终点,但是,路途中充满了各种障碍物和陷阱,需要玩家通过观察、思考和行动来克服。 2. 功能需求 2.1 游戏界面 游戏界面应该简洁明了,让玩家一目了然。界面应该包括以下元素: - 迷宫地图:显示迷宫的布局和障碍物的位置。 - 角色:玩家控制的角色,应该能够通过键盘或鼠标进行移动。 - 终点:玩家需要到达的目的地。 - 计时器:统计玩家完成游戏所需的时间。 - 分数:记录玩家完成游戏所得到的分数。 2.2 游戏规则 游戏规则应该简单明了,让玩家容易理解。游戏规则包括以下内容: - 玩家需要控制角色,通过键盘或鼠标进行移动,到达终点。 - 玩家需要避免碰到障碍物和陷阱,否则游戏失败。 - 玩家需要在规定时间内完成游戏,否则游戏失败。 - 玩家完成游戏后,可以根据完成时间和得分来评估自己的表现。 2.3 游戏难度 游戏的难度应该逐步增加,让玩家有挑战的感觉。游戏的难度可以通过以下方式来实现: - 增加迷宫的大小和复杂度。 - 增加障碍物和陷阱的数量。 - 减少游戏时间,增加游戏压力。 - 增加角色的移动速度和敏捷度。 3. 性能需求 3.1 界面响应速度 游戏界面应该能够快速响应玩家的操作,避免出现卡顿、延迟等现象,提升游戏的流畅性和可玩性。 3.2 图像质量 游戏界面应该具有清晰、细腻的画面,让玩家能够更好地体验游戏的乐趣。 3.3 系统稳定性 游戏应该具有良好的稳定性,避免出现崩溃、闪退等问题,保证游戏的可靠性和持续性。 4. 总结 走迷宫游戏是一款充满挑战和乐趣的休闲游戏,它需要具备简单明了的规则和逐步增加的难度,同时还需要具有快速响应、清晰细腻的画面和良好的稳定性等性能需求。在后续的开发过程中,需要针对这些需求进行不断的优化和改进,以提升游戏的质量和可玩性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风止￴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值