单词搜索游戏里能找到特定吗?

摘要:🧾 一、代码 #include <iostream> #include <vector> #include &a
🧾 一、代码 #include <iostream> #include <vector> #include <climits> #include <cmath> #include <unordered_set> using namespace std; int n, m; bool flag = false; void DFS(vector<vector<char>> &grid, int i, int j, string cur, string target) { if (cur.size() == target.size()) { flag = true; return; } int curidx = cur.size(); if (i < 0 || i > n - 1 || j < 0 || j > m - 1 || grid[i][j] != target[curidx]) { return; } else { cur.push_back(grid[i][j]); char temp = grid[i][j]; grid[i][j] = '#'; DFS(grid, i + 1, j, cur, target); DFS(grid, i - 1, j, cur, target); DFS(grid, i, j + 1, cur, target); DFS(grid, i, j - 1, cur, target); grid[i][j] = temp; } } int main(int argc, char const *argv[]) { cin >> n >> m; vector<vector<char>> grid(n, vector<char>(m)); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < m; j++) { cin >> grid[i][j]; } } string cur; string target; getline(cin, target); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < m; j++) { DFS(grid, i, j, cur, target); if (flag) { break; } } } if (flag) { cout << "true" << endl; } else { cout << "false" << endl; } return 0; } 🧠 二、核心算法:DFS + 回溯 DFS 负责探索所有可能路径。 回溯(backtracking) 在路径失败时还原之前状态。 每次递归会检查字符匹配情况,然后尝试四个方向的继续搜索。
阅读全文