单词方阵 洛谷 P1101
题目描述
给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如:
输入:
8 输出:
qyizhong *yizhong
gydthkjy gy******
nwidghji n*i*****
orbzsfgz o**z****
hhgrhwth h***h***
zzzzzozo z****o**
iwdfrgng i*****n*
yyyygggg y******g 拐来拐去的样例↑
输入输出格式
输入格式:
第一行输入一个数n。(7<=n<=100)。
第二行开始输入nXn的字母矩阵。
输出格式:
突出显示单词的nXn矩阵。
输入输出样例
输入样例#1:
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
输出样例#1:
*******
*******
*******
*******
*******
*******
******* 还是一道比较水的搜索的,可以通过向八个方向判断是否存在"yizhong",虽然比较长,但是主要是复制粘贴,并且可以加上一个如果当前位置到边界距离不足时直接break的剪枝,所以,我选择了披着dfs皮的模拟
上代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n;
char a[][],b[][],t[]={' ','y','i','z','h','o','n','g'};//先把yizhong存起来
bool flag;
void dfs(int x,int y){//各种判断各种复制粘贴,主要时注意二位数组里的下标以及剪枝
if(x->=&&y+<=n){//右上
for(int i=;i<=;i++){
if(a[x-i+][y+i-]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x-i+][y+i-]=t[i];
}
}
flag=;
}
if(y+<=n){//右
for(int i=;i<=;i++){
if(a[x][y+i-]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x][y+i-]=t[i];
}
}
flag=;
}
if(x+<=n&&y+<=n){//右下
for(int i=;i<=;i++){
if(a[x+i-][y+i-]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x+i-][y+i-]=t[i];
}
}
flag=;
} if(x+<=n){//下
for(int i=;i<=;i++){
if(a[x+i-][y]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x+i-][y]=t[i];
}
}
flag=;
}
if(x+<=n&&y->=){//左下
for(int i=;i<=;i++){
if(a[x+i-][y-i+]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x+i-][y-i+]=t[i];
}
}
flag=;
}
if(y->=){//左
for(int i=;i<=;i++){
if(a[x][y-i+]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x][y-i+]=t[i];
}
}
flag=;
}
if(x->=&&y->=){//左上
for(int i=;i<=;i++){
if(a[x-i+][y-i+]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x+i-][y-i+]=t[i];
}
}
flag=;
}
if(x->=){//上
for(int i=;i<=;i++){
if(a[x-i+][y]!=t[i]){
flag=;
}
}
if(flag==){
for(int i=;i<=;i++){
b[x-i+][y]=t[i];
}
}
flag=;
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
b[i][j]='*';
}
for(int i=;i<=n;i++){
scanf("%s",a[i]+);
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
dfs(i,j);//其实是模拟哦
}
}
for(int i=;i<=n;i++,puts(""))
for(int j=;j<=n;j++){
printf("%c",b[i][j]);
}
return ;
}
单词方阵 洛谷 P1101的更多相关文章
- 洛谷 P1101 单词方阵
题目链接 https://www.luogu.org/problemnew/show/P1101 题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中 ...
- 洛谷——P1101 单词方阵
https://www.luogu.org/problem/show?pid=1101#sub 题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放 ...
- 洛谷P1101 单词方阵——S.B.S.
题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...
- 洛谷P1101 单词方阵【暴力】【字符串】
题目描述 给一n×nn \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 888 个方向的任一方向,同一单词摆放时不再改变方向, ...
- 【洛谷P1101】单词方阵
题目大意:给一 \(n \times n\) 的字母方阵,内可能蕴含多个 \("yizhong"\) 单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 8 个方向的任一方向, ...
- 洛谷P1101单词方阵
题目描述 给一n×n的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的. 摆放可沿着 8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有 ...
- 洛谷P1101 单词方阵
题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...
- 洛谷P1101 单词方阵【DFS】
给一n \times nn×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向 ...
- 洛谷 P1101单词方阵
我已经,是这个世界上,最幸福的女孩了 ——<末日时 ...
随机推荐
- 用Markdown优雅的写文章
简介 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 简单点来说,Markdown是文本标记语言,在普通文本的基础上加了一些特殊标 ...
- mysql中的limit
mysql中常使用limit做分页查询,使用方法也很简单: SELECT * FROM table LIMIT [offset,] rows #注: offset-偏移量,rows查询返回的行数 -- ...
- bzoj1041题解
求一个给定的圆(x^2+y^2=r^2),在圆周上有多少个点的坐标是整数.r<=2000 000 000 这道题刚看时,就明白暴力不能解决一切.要是r^2<=20亿,还可以sqrt循环, ...
- java 中的 instanceof
instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回boo ...
- 在Docker容器中运行.Net Core web Api项目
安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...
- HDU 1728 逃离迷宫(DFS)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) ...
- Codeforces_776E: The Holmes Children (数论 欧拉函数)
题目链接 先看题目中给的函数f(n)和g(n) 对于f(n),若自然数对(x,y)满足 x+y=n,且gcd(x,y)=1,则这样的数对对数为f(n) 证明f(n)=phi(n) 设有命题 对任意自然 ...
- 采用HTML5之"data-"机制自由提供数据
周末总是过得很快,又到了跟代码亲密接触的日子,我在北京向各位问好,今天我分享一点关于前端的东西,HTML5之标签"data-*"自定义属性的值传递. 在过去学习JavaScript ...
- [C++ Calculator 项目] 基础运算实现
Calculator V1.1 注:这是C++计算器项目第二部分-运算 [基于初始部分增改而得] 源文件已上传至github 主要问题: Ⅰ.运算实现的问题在于( ) + - * /的优先级的处理,以 ...
- 学习笔记TF031:实现VGGNet
VGGNet,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司一起研发,深度卷积神经网络.VGGNet反复堆叠3x3小型卷积核和2x2最大池化层, ...