返回

C++/Java/JavaScript/Python:“找单词”游戏,找一找,考验你的眼力

后端

找单词游戏:用 C++、Java、JavaScript 和 Python 来寻找隐藏的单词

在文字游戏中,你见过“找单词”游戏吗?在二维字符数组中寻找隐藏的单词,是一件很有趣也很考验眼力的活动。今天,我们就来用 C++、Java、JavaScript 和 Python 四种语言来实现一个“找单词”游戏。

游戏规则

游戏规则很简单:给定一个字符串和一个二维字符数组,如果字符串存在于二维字符数组中,则按字符串的字符顺序输出字符串每个字符所在单元格的位置下标字符串;如果找不到,返回字符串“N”。

代码实现

下面是用 C++、Java、JavaScript 和 Python 四种语言实现的“找单词”游戏代码示例:

C++

#include <iostream>
#include <vector>

using namespace std;

bool findWord(vector<vector<char>>& board, string word) {
  int m = board.size();
  int n = board[0].size();

  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      if (board[i][j] == word[0]) {
        if (dfs(board, word, i, j, 0)) {
          return true;
        }
      }
    }
  }

  return false;
}

bool dfs(vector<vector<char>>& board, string word, int i, int j, int index) {
  if (index == word.size()) {
    return true;
  }

  if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size() || board[i][j] != word[index]) {
    return false;
  }

  char temp = board[i][j];
  board[i][j] = '0';

  bool found = dfs(board, word, i - 1, j, index + 1) ||
              dfs(board, word, i + 1, j, index + 1) ||
              dfs(board, word, i, j - 1, index + 1) ||
              dfs(board, word, i, j + 1, index + 1);

  board[i][j] = temp;

  return found;
}

int main() {
  vector<vector<char>> board = {
    {'A', 'B', 'C', 'E'},
    {'S', 'F', 'C', 'S'},
    {'A', 'D', 'E', 'E'}
  };

  string word = "ABCCED";

  cout << findWord(board, word) << endl;

  return 0;
}

Java

import java.util.Arrays;

class Solution {
    public boolean findWord(char[][] board, String word) {
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[0].length; j++) {
                if (board[i][j] == word.charAt(0)) {
                    if (dfs(board, word, i, j, 0)) {
                        return true;
                    }
                }
            }
        }

        return false;
    }

    private boolean dfs(char[][] board, String word, int i, int j, int index) {
        if (index == word.length()) {
            return true;
        }

        if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != word.charAt(index)) {
            return false;
        }

        char temp = board[i][j];
        board[i][j] = '0';

        boolean found = dfs(board, word, i - 1, j, index + 1) ||
                dfs(board, word, i + 1, j, index + 1) ||
                dfs(board, word, i, j - 1, index + 1) ||
                dfs(board, word, i, j + 1, index + 1);

        board[i][j] = temp;

        return found;
    }
}

JavaScript

const findWord = (board, word) => {
  for (let i = 0; i < board.length; i++) {
    for (let j = 0; j < board[0].length; j++) {
      if (board[i][j] === word[0]) {
        if (dfs(board, word, i, j, 0)) {
          return true;
        }
      }
    }
  }

  return false;
};

const dfs = (board, word, i, j, index) => {
  if (index === word.length) {
    return true;
  }

  if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] !== word[index]) {
    return false;
  }

  const temp = board[i][j];
  board[i][j] = '0';

  const found = dfs(board, word, i - 1, j, index + 1) ||
                dfs(board, word, i + 1, j, index + 1) ||
                dfs(board, word, i, j - 1, index + 1) ||
                dfs(board, word, i, j + 1, index + 1);

  board[i][j] = temp;

  return found;
};

Python

def findWord(board, word):
    for i in range(len(board)):
        for j in range(len(board[0])):
            if board[i][j] == word[0]:
                if dfs(board, word, i, j, 0):
                    return True

    return False


def dfs(board, word, i, j, index):
    if index == len(word):
        return True

    if i < 0 or i >= len(board) or j < 0 or j >= len(board[0]) or board[i][j] != word[index]:
        return False

    temp = board[i][j]
    board[i][j] = '0'

    found = dfs(board, word, i - 1, j, index + 1) or \
           dfs(board, word, i + 1, j, index + 1) or \
           dfs(board, word, i, j - 1, index + 1) or \
           dfs(board, word, i, j + 1, index + 1)

    board[i][j] = temp

    return found

总结

“找单词”游戏是一个很有趣也很考验眼力的游戏。今天,我们用 C++、Java、JavaScript 和 Python 四种语言实现了这个游戏。希望大家能够喜欢!

常见问题解答

1. 这个游戏难不难?

游戏的难度取决于给定的单词和字符数组。如果单词很长或字符数组很大,那么游戏难度就比较大。

2. 这个游戏有什么好处?

这个游戏可以锻炼眼力、注意力和逻辑思维能力。

3. 这个游戏可以用其他语言实现吗?

当然可以。只要掌握了算法,就可以用任何语言实现这个游戏。

4. 这个游戏可以多人玩吗?

可以。可以把这个游戏做成一个多人游戏,让玩家互相比赛找单词。

5. 这个游戏可以用在哪些场景中?

这个游戏可以用来消磨时间、训练大脑,也可以用来作为教学工具。