这是一位同学的面试题。典型的DFS,唯一和以前不同的是,我改进了move的方法。
#include <iostream>
#include <string>
#include <queue>
using namespace std;
bool check(const vector<vector<char> > &dict,
const int &row, const int &col) {
return row >= 0 && row < dict.size() && col >= 0 && dict[0].size();
}
bool start_search(const vector<vector<char> > &dict,
const string &key, const int &row, const int &col, int idx) {
//dict[x][y] == key[0]
if (!check(dict, row, col)) {
return false;
}
if (dict[row][col] != key[idx]) {
return false;
}
if (idx == key.size()-1) {
cout << "begin return! " << endl;
return true;
}
for (int i = -1; i <= 1; i++) {
for (int j = -1 ; j <= 1; j++) {
if (i == 0 && j == 0) {
continue;
}
if (start_search(dict, key, row+i, col+j, idx+1)) {
cout << "(" << row+i << "," << col+j << ") at" << idx+1 << endl;
return true;
}
}
}
return false;
}
bool search_phrase(const vector<vector<char> > &dict, const string &key) {
char start_ch = key[0];
for (int i = 0; i < dict.size(); i++) {
for (int j = 0; j < dict[0].size(); j++) {
if (dict[i][j] == start_ch) {
if (start_search(dict, key, i, j, 0)) {
cout << "(" << i << "," << j << ")" << " at0" << endl;
return true;
}
}
}
}
return false;
}
int main () {
vector<vector<char>> v={
{'a','c','d'},
{'b','z','h'},
{'q','p','t'},
{'b','b','i'}
};
string key = "dztpqbb";
cout << search_phrase(v, key);
}