关注
#include <cstdio>
#include <cstdlib>
#include <string>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 100;
enum DIR {
RIGHT,
LOW,
RLOW
};
int dfs(char maze[maxn][maxn], int m, int n, string s, string find, int idx, int x, int y, DIR d) {
if (s == find) return 1;
if (idx >= find.size()) return 0;
if (s[idx] != find[idx]) return 0;
int right = 0, low = 0, rlow = 0;
if (d == RIGHT && y + 1 < n) {
right = dfs(maze, m, n, s + maze[x][y + 1], find, idx + 1, x, y + 1, RIGHT);
}
if (d == LOW && x + 1 < m) {
low = dfs(maze, m, n, s + maze[x + 1][y], find, idx + 1, x + 1, y, LOW);
}
if (d == RLOW && x + 1 < m && y + 1 < n) {
rlow = dfs(maze, m, n, s + maze[x + 1][y + 1], find, idx + 1, x + 1, y + 1, RLOW);
}
return right + low + rlow;
}
int main()
{
int t;
char maze[maxn][maxn];
string find;
cin >> t;
while (t--) {
memset(maze, 0, sizeof(maze));
int m, n;
cin >> m >> n;
for (int i = 0; i < m; ++i) {
cin >> maze[i];
}
cin >> find;
int ans = 0;
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
string s("");
int r = dfs(maze, m, n, s + maze[i][j], find, 0, i, j, RIGHT);
int l = dfs(maze, m, n, s + maze[i][j], find, 0, i, j, LOW);
int rl = dfs(maze, m, n, s + maze[i][j], find, 0, i, j, RLOW);
ans = ans + r + l + rl;
}
}
cout << ans << endl;
}
return 0;
}
查看原帖
点赞 评论
相关推荐

点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 考研对你找工作产生了哪些影响? #
5756次浏览 70人参与
# 打杂的实习你会去吗? #
108953次浏览 953人参与
# 聊聊这家公司值得去吗 #
239911次浏览 2242人参与
# 机械只有读研才有出路吗? #
20006次浏览 228人参与
# 你认为哪个岗位找工作最卷 #
16995次浏览 66人参与
# 面试被问第一学历差时该怎么回答 #
130871次浏览 823人参与
# 远程面试的尴尬瞬间 #
101117次浏览 830人参与
# 硬件人绝对不能踩的坑 #
61461次浏览 736人参与
# 工作中哪个瞬间让你想离职 #
24274次浏览 166人参与
# kpi面有什么特征 #
36210次浏览 266人参与
# 你有哪些缓解焦虑的方法? #
3948次浏览 143人参与
# 如何缓解入职前的焦虑 #
187428次浏览 1319人参与
# 职场人,说说你的烦心事 #
9145次浏览 83人参与
# 秋招最大的收获是什么? #
34297次浏览 302人参与
# 实习生应该准时下班吗 #
223654次浏览 1398人参与
# 职场上哪些事情令人讨厌 #
16961次浏览 86人参与
# 你今年的平均薪资是多少? #
126856次浏览 661人参与
# 为了找工作你投递了多少公司? #
12425次浏览 170人参与
# 运营/市场营销人的秋招现状 #
17357次浏览 189人参与
# 数字马力求职进展汇总 #
175401次浏览 1470人参与