关注
#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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26年哪些行业会变好/更差 #
11712次浏览 157人参与
# 卷__卷不过你们,只能卷__了 #
5174次浏览 132人参与
# 去年的flag与今年的小目标 #
5720次浏览 143人参与
# 哪些公司在招寒假实习? #
5851次浏览 65人参与
# 有深度的简历长什么样? #
11302次浏览 218人参与
# 腾讯音乐求职进展汇总 #
146861次浏览 1042人参与
# 入职第一天 #
6846次浏览 140人参与
# 写论文的崩溃时刻 #
2748次浏览 92人参与
# 你都用AI做什么 #
4290次浏览 110人参与
# 你不能接受的企业文化有哪些 #
6190次浏览 117人参与
# 一人分享一道面试手撕题 #
14808次浏览 640人参与
# 现在前端的就业环境真的很差吗 #
486819次浏览 5836人参与
# 办公室恋情是职场大忌吗 #
15342次浏览 31人参与
# 海康威视求职进展汇总 #
553634次浏览 3721人参与
# 机械人的秋招小目标 #
25704次浏览 225人参与
# 央国企投递记录 #
169944次浏览 1633人参与
# 应届生应该先就业还是先择业 #
162634次浏览 825人参与
# 实习,不懂就问 #
148236次浏览 1334人参与
# 你的秋招进行到哪一步了 #
2478392次浏览 23235人参与
# 非技术投递记录 #
678307次浏览 6832人参与
三奇智元机器人科技有限公司公司福利 74人发布
