
🔔本文收录于「2025华为OD机试真题(Java版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!!
🚫提醒:拒绝一切代考/替考,违法必究!本人所写题库均搜集于互联网。
💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新皆可阅读使用!
📚1. 题目描述
📢 具体题目描述如下:
贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。
蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。
下面让我们来完成含吃蛇游戏的模拟。
给定一个 NM 的数组arr,代表 NM 个方格组成的版图,贪吃蛇每次移动一个方格。
若arr[i][j] == H
,表示该方格为贪吃蛇的起始位置;
若arr[i][j] == F
,表示该方格为食物,
若arr[i][j] == E
,表示该方格为空格。
贪吃蛇初始长度为1,初始移动方向为向左。
为给定一系列会吃蛇的移动操作,返回操作后蛇的长度,如果在操作执行完之前已经游戏结束,返回游戏结束时蛇的长度。
贪吃蛇移动、吃食物和碰撞处理的细节见下面图示:
图1:截取了贪吃蛇移动的一个中间状态,H表示蛇头,F表示食物,数字为蛇身体各节的编号,蛇为向左移动,此时蛇头和食物已经相邻。
图2:蛇头向左移动一格,蛇头和食物重,注意此时食物的格子成为了新的蛇头,第1节身体移动到蛇头位置,第2节身体移动到第1节身体位置,以此类推。最后添加第4节身体到原来第3节身体的位置。
图3:蛇头继续向左移动一格,身体的各节按上述规则移动,此时蛇头已经和边界相邻,但还未碰撞。
图4:蛇头继续向左移动一格,此时蛇头已经招过边界,发生碰撞,游戏结束。
图5和图6给出一个蛇头和身体碰撞的例子,蛇为向上移动。
图5时蛇头和第7节身体相邻,但还未碰撞;
图6蛇头向上移动一格,此时蛇头和第8节身体都移动到了原来第7节身体的位置,发生碰撞,游戏结束。

如上示图来源博主:MISAYAONE,若有侵权,立马删除。