Lintcode 3656 · Design Snake Game (贪吃蛇,设计题)

3656 · Design Snake Game

Medium

Description

In this question, you need to design a snake game class SnakeGame.

Snake Game: There exists a snake in a matrix. Food will appear continuously in this matrix, and we need to control the snake to move continuously (through the four directions of up, down, left, and right) to eat the food. after eating food. The length of the snake will increase by one bit. At the same time, the game score will be increased by 1. Afterwards, the next food will be refreshed (the position occupied by the snake will not be refreshed). If the snake hits the wall or eats its own body while eating the food, the game is over.

The function's constructor receives the following parameters:

width: the number of columns in the snake matrix interface

height: the number of rows in the snake matrix interface

foods: The coordinates of the food, represented by a two-dimensional array, where the first element of each array is the row coordinate, and the second element is the column coordinate

In addition, you need to complete the move() function, which will receive a string indicating the direction. Indicates that the snake needs to move one space in this direction. You need to return the Snake score after the move (initial score is 0). Returns -1 if the game ends after the snake moves.

Only $39.9 for the "Twitter Comment System Project Practice" within a limited time of 7 days!

WeChat Notes Twitter for more information(WeChat ID jiuzhang104)

Example

Example 1

Input:

3

2

\[1, 2\], \[0, 0\]

"r", "d", "r", "u", "l", "l", "l"

Output:

0, 0, 1, 1, 1, 1, 2, -1

Explanation:

The initial state is as follows:

s | |

| | f

Among them, s represents the snake, and f represents the current food.

After action "r":

| s |

| | f

...

After eating the first food:

f | |

| s |s

...

After eating the second food:

s | s | s

| |

Example 2

Input:

3

2

\[0, 1\], \[1, 1\], \[1, 0\], \[0, 2\]

"r", "d", "l", "u", "r", "r", "d", "l", "u"

Output:

1, 2, 3, 3, 3, 4, 4, 4, -1

解法1:蛇的身体用deque。另外再用set判重(如果吃到自己的身体的话)。

食物可以用queue,因为是按先后顺序一个一个出现。

为什么蛇的身体用deque呢,因为吃到食物要pop_tail,而在游走的过程中要pop_front。

cpp 复制代码
class SnakeGame {
public:
    SnakeGame(int width, int height, vector<vector<int>>& foods) : width(width), height(height) {
        for (auto food : foods) {
            foodQueue.push({food[0], food[1]});
        }
        currPos = {0, 0}; //initial position (0,0)
        score = 0;
    }

    /**
     * @param direction: the direction of the move
     * @return: the score after the move
     */
    int move(string &direction) {
        int n = direction.size();
        switch (direction[0]) {
            case 'r':
                currPos.second++;
                break;
            case 'l':
                currPos.second--;
                break;
            case 'd':
                currPos.first++;
                break;
            case 'u':
                currPos.first--;
                break;
        }
        if (currPos.first < 0 || currPos.first >= height) return -1;
        if (currPos.second < 0 || currPos.second >= width) return -1;
        if (bodySet.find(currPos) != bodySet.end()) return -1;
        bodySet.insert(currPos);
        bodyQueue.push_back(currPos);
        if (!foodQueue.empty() && currPos == foodQueue.front()) {
            foodQueue.pop();
            score++;
        } else {
            bodySet.erase(bodyQueue.front());
            bodyQueue.pop_front();
        }
       
        return score;
    }
private:
    queue<pair<int, int>> foodQueue;
    int width, height;
    set<pair<int, int>> bodySet; // snake body set
    deque<pair<int, int>> bodyQueue; // snake body queue
    pair<int, int> currPos;
    int score;
};
相关推荐
Jerry14 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发15 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星15 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮15 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home840715 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>16 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC17 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC17 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师17 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法
兰令水17 小时前
hot100【acm版】【2026.7.14打卡-java版本】
java·数据结构·算法·leetcode·面试