数据结构与算法猜字谜c++
时间: 2023-12-18 15:03:57 浏览: 26
以下是一个简单的数据结构与算法猜字谜的C++实现:
```c++
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <algorithm>
using namespace std;
const int MAXN = 1000;
const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0,1, 1, 1, 0 -1, -1, -1};
n, m, k;
char a[MAXNMAXN];
vector<string> words;
bool check(int x, int y, int dir, string word) {
int len = word.length();
if (x + dx[dir] * (len - 1) < 0 || x + dx[dir] * (len - 1) >= n || y + dy[dir] * (len - 1) < 0 || y + dy[dir] * (len - 1) >= m) {
return false;
}
for (int i = 0; i < len; i++) {
if (a[x + dx[dir] * i][y + dy[dir] * i] != word[i]) {
return false;
}
}
return true;
}
bool findWord(string word) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int dir = 0; dir < 8; dir++) {
if (check(i, j, dir, word)) {
return true;
}
}
}
}
return false;
}
int main() {
ifstream fin("input.txt");
fin >> n >> m >> k;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
fin >> a[i][j];
}
}
string word;
for (int i = 0; i < k; i++) {
fin >> word;
words.push_back(word);
}
sort(words.begin(), words.end());
words.erase(unique(words.begin(), words.end()), words.end());
for (int i = 0; i < words.size(); i++) {
if (findWord(words[i])) {
cout << words[i] << endl;
}
}
return 0;
}
```
该程序从文件中读取矩阵和单词列表,然后对单词列表进行排序和去重,最后遍历单词列表,对于每个单词,检查它是否在矩阵中出现过。