关注
#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;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 校招生月薪1W算什么水平 #
34410次浏览 189人参与
# 哪一瞬间觉得自己长大了 #
38226次浏览 493人参与
# “vivo”个offer #
38879次浏览 280人参与
# 如果上班像打游戏,你最想解锁什么技能 #
8166次浏览 70人参与
# vivo工作体验 #
27917次浏览 124人参与
# 为了实习逃课值吗? #
28664次浏览 270人参与
# 工作后明白的那些道理 #
21726次浏览 225人参与
# 一人一个landing小技巧 #
123872次浏览 1441人参与
# 我是面试官,请用一句话让我破防 #
26618次浏览 128人参与
# 实习最想跑路的瞬间 #
87461次浏览 543人参与
# 中美关税战对我们有哪些影响 #
43001次浏览 361人参与
# 机械制造2023笔面经 #
149558次浏览 840人参与
# 如果重来一次你还会读研吗 #
201621次浏览 1932人参与
# AI时代,哪些岗位最容易被淘汰 #
3347次浏览 27人参与
# 中美关系回暖,你会选择出海吗? #
6690次浏览 107人参与
# 华为保温 #
107658次浏览 408人参与
# 哪些行业值得去? #
5362次浏览 50人参与
# i人适合做什么工作 #
11399次浏览 97人参与
# 美团开奖 #
222750次浏览 1150人参与
# 读研or工作,哪个性价比更高? #
78247次浏览 769人参与
# 如果秋招能重来,我会____ #
37489次浏览 300人参与
腾讯公司福利 1145人发布
