PC/UVa:110302/10010
书上有一个提示,说是否一定要写8个方向的循环,还是可以写一个函数来判断8个方向。既然提示了,那就按照书上的提示来写了。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
bool find(const vector<vector<char>> &vvcRec, const string &strWord, int x, int y, int dirx, int diry)
{
size_t k, i, j;
for (k = 0, i = x, j = y;
k < strWord.size() && i >= 0 && i < vvcRec.size() && j >= 0 && j < vvcRec[0].size();
k++, i += dirx, j += diry)
{
if (vvcRec[i][j] != strWord[k]) break;
}
if (k != strWord.size()) return false;
else{
cout << x + 1 << ' ' << y + 1 << endl;
return true;
}
}
int main()
{
int T = 0;
cin >> T;
cin.get();
cin.get();
for (int t = 0; t < T; t++)
{
int m = 0, n = 0, k = 0;
cin >> m >> n;
vector<vector<char>> vvcRec(m, vector<char>(n, '\0'));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cin >> vvcRec[i][j];
vvcRec[i][j] = tolower(vvcRec[i][j]);
}
}
cin >> k;
cin.get();
vector<string> vstrWord;
string strWord;
while (getline(cin, strWord)){
if (strWord.empty()) break;
for (char& ch : strWord)
{
ch = tolower(ch);
}
vstrWord.push_back(strWord);
}
for (auto word : vstrWord)
{
bool bFind = false;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (vvcRec[i][j] == word[0] &&
(
find(vvcRec, word, i, j, -1, 0) ||
find(vvcRec, word, i, j, -1, 1) ||
find(vvcRec, word, i, j, 0, 1) ||
find(vvcRec, word, i, j, 1, 1) ||
find(vvcRec, word, i, j, 1, 0) ||
find(vvcRec, word, i, j, 1, -1) ||
find(vvcRec, word, i, j, 0, -1) ||
find(vvcRec, word, i, j, -1, -1)
)
){
bFind = true;
break;
}
}
if (bFind) break;
}
}
if (t != T - 1) cout << endl;
}
return 0;
}
/*
1
8 11
abcDEFGhigg
hEbkWalDork
FtyAwaldORm
FtsimrLqsrc
byoArBeDeyv
Klcbqwikomk
strEBGadhrb
yUiqlxcnBjf
4
Waldorf
Bambi
Betty
Dagbert
*/
转载:https://blog.csdn.net/RayoNicks/article/details/101218685
查看评论