oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/BOGGLE
大意如下

输入输出

输入

URLPM
XPRET
GIAET
XTNZY
XOQRS PRETTY
GIRL
REPEAT
KARA
PANDORA
GIAZAPX 输出
PRETTY YES
GIRL YES
REPEAT YES
KARA NO
PANDORA NO
GIAZAPX YES

估摸着很简单 就蹭蹭8个方向DFS 代码写完
测试用例过了
代码如下

#include <iostream>
#include <string>
#include <vector> using namespace std; int n, m;
int record = ;
const int dx[] = { -,-,-,,,,, };
const int dy[] = { -,,,-,,,-, }; bool isrange(int x, int y) {
if (x < || x >= || y < || y >= )
return false; return true;
} bool hasword(int x, int y, const string& word ,int idx,const vector<vector<char>>& table)
{
if (!isrange(x, y)) return false; if (table[x][y] != word[idx]) return false; if (idx == word.size()-) return true; for (int i = ; i < ; i++) {
int nextx = x + dx[i];
int nexty = y + dy[i];
if (hasword(nextx, nexty, word,idx+, table))
return true;
} return false;
} int main()
{
int t = ;
cin >> t;
while (t--) {
vector<vector<char>> table(, vector<char>(, ));
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
cin >> table[i][j];
}
} int check = ;
cin >> check;
vector<string> checkWord; while (check--) {
string s;
cin >> s;
int find = ;
record = ;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
if (hasword(i, j, s, ,table)) {
cout << s << " YES" << endl;
find = ;
goto LABEL;
}
}
} LABEL:
if ( == find) {
cout << s << " NO" << endl;
}
}
} return ;
}

但是居然一个特殊用例过不了 代码被判为TLE

输入

AAAAA
AAAAA
AAAAA
AACCC
AACCB AAAAAAAAAB

左思右想不得其门 只得针对该例子进行了特殊处理 翻转字符串!
添加代码不多 仅仅多了 reverse(s.begin(), s.end()); 一行

 #include <iostream>

 #include <iostream>
#include <string>
#include <vector>
#include <algorithm> using namespace std; int n, m; const int dx[] = { -,-,-,,,,, };
const int dy[] = { -,,,-,,,-, }; vector<vector<int>> mem(, vector<int>(, )); bool isrange(int x, int y) {
if (x < || x >= || y < || y >= )
return false; return true;
} bool hasword(int x, int y, const string& word, int idx, const vector<vector<char>>& table)
{
if (!isrange(x, y)) {
return false;
} if (table[x][y] != word[idx]) { return false;
} if (idx >= word.size() - ) return true; for (int i = ; i < ; i++) {
int nextx = x + dx[i];
int nexty = y + dy[i];
if (hasword(nextx, nexty, word, idx + , table))
return true;
} return false;
} int main()
{
int t = ;
cin >> t;
while (t--) {
vector<vector<char>> table(, vector<char>(, ));
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
cin >> table[i][j];
}
} int check = ;
cin >> check;
vector<string> checkWord; while (check--) {
string s;
cin >> s;
string copys = s;
reverse(s.begin(), s.end());
int find = ;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
mem[i][j] = ;
}
}
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
if (hasword(i, j, s, , table)) {
cout << copys << " YES" << endl;
find = ;
goto LABEL;
}
}
} LABEL:
if ( == find) {
cout << copys << " NO" << endl;
}
}
} return ;
}

但是实际上 当测试字符串为AAAAAAAAABAAAAAAAA 也一样会TLE
所以 实际上我们需要使用数组缓存从当前格子出发不能解决的字符串记录 避免多次重复尝试失败的路径
代码添加了一个变量数组
int d[x][y][l]; 记录x y格子出发的尝试匹配长度为l的字符串 能否成功,如果失败则置0。
下次DFS 发现该标记为 0 则直接返回 不进行尝试

 #include <bits/stdc++.h>
using namespace std;
int T,n,c[][],cw[],len[];
char a[][],w[][];
int nx[] = {,,-,-,-,,,},ny[] = {,,,,-,-,-,};
int dx,dy,is;
int d[][][]; int dfs(int x,int y,int now,int l)
{
if(d[x][y][l]) return ;
if(l == len[now]) return ;
d[x][y][l] = ;
is = ;
for(int i = ;i < ;i++)
{
dx = x+nx[i];
dy = y+ny[i];
if(a[dx][dy] == w[now][l])
{
if(dfs(dx,dy,now,l+))
{
//c[x][y] = 0;
return ;
}
}
}
//d[x][y][l] = 0;
return ;
} int main()
{
scanf("%d",&T);
while(T--)
{
memset(cw,,sizeof(cw));
for(int i = ;i <= ;i++)
{
for(int j = ;j <= ;j++)
{
scanf(" %c",&a[i][j]);
}
}
scanf("%d",&n);
for(int i = ;i <= n;i++)
{
scanf("%s",w[i]);
len[i] = strlen(w[i]);
for(int j = ;j <= ;j++)
{
for(int k = ;k <= ;k++)
{
if(a[j][k] == w[i][])
{
if(dfs(j,k,i,))
{
cw[i] = ;
break;
}
}
}
if(cw[i]) break;
}
memset(d,,sizeof(d));
}
for(int i = ;i <= n;i++)
{
printf("%s %s\n",w[i],((cw[i] == ) ? "YES" : "NO"));
}
}
}

《算法问题实战策略》 BOGGLE的更多相关文章

  1. 算法问题实战策略 PICNIC

    下面是另一道搜索题目的解答过程题目是<算法问题实战策略>中的一题oj地址是韩国网站 连接比较慢 https://algospot.com/judge/problem/read/PICNIC ...

  2. 《算法问题实战策略》-chaper7-穷举法

    关于这一章节<算法实战策略>有一段概述问题,我认为对于编程人员来说非常有价值,故在这里进行如下的摘抄: 构想算法是很艰难的工作.相比大家都经历过,面对复杂的要求只是傻乎乎地盯着显示器,或者 ...

  3. 《算法问题实战策略》-chaper32-网络流

    基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓 ...

  4. 《算法问题实战策略》-chaper13-数值分析

    这一章节主要介绍我们在进行数值分析常用的二分.三分和一个近似求解区间积分的辛普森法. 首先介绍二分. 其实二分的思想很好理解并且笔者在之前的一些文章中也有所渗透,对于二次函数甚至单元高次函数的零点求解 ...

  5. 《算法问题实战策略》——chaper9——动态规划法技巧

    Q1: 数字游戏: 两个人(A.B)用n个整数排成的一排棋盘玩游戏,游戏从A开始,每个人有如下操作: (1)    拿走棋盘最右侧或者最左侧的棋子,被拿走的数字从棋盘中抹掉. (2)    棋盘中还剩 ...

  6. 《算法问题实战策略》-chaper8-动态规划法

    Q1:偶尔在电视上看到一些被称为“神童”的孩子们背诵小数点以后几万位的圆周率.背诵这么长的数字,可利用分割数字的方法.我们用这种方法将数字按照位数不等的大小分割后再背诵. 分割形式如下: 所有数字都相 ...

  7. 《算法问题实战策略》-chaper21-树的实现和遍历

    这一章节开始介绍一个数据结构中的一个基本概念——树. 我们从数据结构的解读来解释树结构的重要性,现实世界的数据除了最基本的线性结构(我们常用队列.数组和链表等结构表征),还有一个重要的特性——层级结构 ...

  8. 算法问题实战策略 QUADTREE

    地址 https://algospot.com/judge/problem/read/QUADTREE 将压缩字符串还原后翻转再次压缩的朴素做法 在数据量庞大的情况下是不可取的 所以需要在压缩的情况下 ...

  9. 算法问题实战策略 DICTIONARY

    地址 https://algospot.com/judge/problem/read/DICTIONARY 解法 构造一个26字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先 ...

随机推荐

  1. Linux环境下搭建JDK环境

    yum安装 傻瓜式安装,记录几条命令 1.查看可安装的jdk版本(需要安装yum): yum -y list java* 2.安装jdk yum install -y java-1.8.0-openj ...

  2. MVC 控制台 +log4net 存入数据库

    首先在你的项目 安装好 log4net包 如下图进入AssemblyInfo.cs类 代码里面 加上这一串 [assembly: log4net.Config.XmlConfigurator(Conf ...

  3. CODING 2.0 服务升级:一站式服务体系助力企业研发上云

    近日,CODING 在 KubeCon 2019 上海站上正式推出了 DevOps 的一站式解决方案: CODING 2.0,除了进行 产品 及 产品理念 的升级,还对用户服务进行了整体升级,主要涵盖 ...

  4. Redis和MongoDB区别

    MongoDB 更类似 MySQL,支持字段索引.游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务.Redis 是一个开源(BSD许可)的,内存中的数据结 ...

  5. python将字符串插入表中避免单双引号问题

    调用pymysql.escape_string('向数据库插入的数据') 例如: import pymysql str = 'as"sdf' print(pymysql.escape_str ...

  6. 今日资源帖-PPT逆袭秘籍72集+2000套模板,太经典了

    好资源不私藏,分享是一种态度 今日给大家分享的是PPT教程和2000套模板 如何让PPT成为你职场的利器 如何让你的PPT更具表现力 2000套模板随便选 PPT视频教程 链接 https://pan ...

  7. 网易发起“疾风”智造IoT联盟,深化“互联网+先进制造业”发展

    7月26日,2019网易云创峰会在杭州拉开序幕,本次峰会以“连接•洞察•进化”为主题,汇聚行业领袖.技术大咖及业界代表,探讨技术演进与行业应用趋势,研商生态合作升级.共赢未来的道路.上午的主论坛中,网 ...

  8. Centos7下Redis设置开机自启动服务

    有个同事说重启了服务器没有自启动redis,我看了一下,是以前手动编译安装的模式,没有配置开机启动的服务 这边做个笔记记录一下redis如何设置编译安装模式的开机自启动. 第一种方法: 1.编写red ...

  9. Docker-Nginx,发布前端服务

    1.安装环境: yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 yum-config-manager \ --add-r ...

  10. 【Web开发】到底什么是短链接

    目录 什么是短链接 为什么使用短链接 节省发送的内容 提升用户体验 便于链接追踪,分析点击来源 一定程度上保护原始网站链接 短链接生成平台 短链接生成原理 参考 今天无意中看到一个名词--" ...