题目描述

给一n×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。

摆放可沿着 8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。

输出时,将不是单词的字母用*代替,以突出显示单词。例如:

输入:                    输出:

8

qyizhong                *yizhong

gydthkjy                  gy******

nwidghji                   n*i*****

orbzsfgz                  o**z****

hhgrhwth                 h***h***

zzzzzozo                   z****o**

iwdfrgng                   i*****n*

yyyygggg                 y******g

输入输出格式

输入格式:

第一行输入一个数n,(1007≤n≤100)。

第二行开始输入n×n的字母矩阵。

输出格式:

突出显示单词的n×n矩阵。

样例#1:

输入:                            

7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
输出:
*******
*******
*******
*******
*******
*******
******* 样例#2:
输入:
8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg
输出:
*yizhong
gy******
n*i*****
o**z****
h***h***
z****o**
i*****n*
y******g
 分析:
这道题挺有趣的我可能写的大部分都是模拟的代码,就是敲的有点烦.
正解,有题目我们可以得知我们要求连续的字符串"yizhong",且组成字符串的字母的顺序不可改变,搜索该怎么搜?
因此我们必须确定搜索方向我们可以发现当我们知道字母'y'和字母'i'时我们就可以确定搜索的方向了想到这里这题就很简单了,
剩下的字母我们就可以用一个循环来依次找到.
输出的处理,因为题目要求只输出合格的字符串剩下的仅输出'*'那么我们可以用一个bool型变量judge[i][j]来判断如果它是合格的就赋值为true
否则赋值为false接下来判断一下是否合格就可以输出了
代码:
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
const int N=+;
char Map[N][N],keay[N][N];
int startx,starty,n;
int dirx[]={,,-,,,-,,-};//八个方向
int diry[]={,,,-,,,-,-};
bool judge[N][N];
void color(int ,int ,int );
void direct(int, int ,int );
void dfs(int x,int y)
{
for(int i=;i<;i++)
{
int xx=dirx[i]+startx;
int yy=diry[i]+starty;
if(xx<||xx>n||yy<||yy>n) continue;//边界
if(Map[xx][yy]=='i')//找'i'
{
direct(xx,yy,i);
}
}
}
void direct(int x,int y,int f)//f为这个字符串的方向
{
int xx=x,yy=y;
int cnt=;
for(int i=;i<=;i++)//因为只剩下5个没有找到的字母所以只用循环5次
{
xx=xx+dirx[f];
yy=yy+diry[f];
if(i==)
{
if(Map[xx][yy]=='z')
cnt++;
}
if(i==)
{
if(Map[xx][yy]=='h')
cnt++;
}
if(i==)
{
if(Map[xx][yy]=='o')
cnt++;
}
if(i==)
{
if(Map[xx][yy]=='n')
cnt++;
}
if(i==)
{
if(Map[xx][yy]=='g')
cnt++;
}
if(cnt==)
color(xx,yy,f);
}
return;
}
void color(int x,int y,int f)//赋值操作
{
int xx=x;
int yy=y;
judge[x][y]=true;
for(int i=;i<=;i++)//倒着回去赋值
{
xx=xx-dirx[f];
yy=yy-diry[f];
judge[xx][yy]=true;
}
}
int main()
{
cin>>n;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
cin>>Map[i][j];
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(Map[i][j]=='y')
{
startx=i;starty=j;
dfs(startx,starty);
}
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(judge[i][j])
cout<<Map[i][j];
else
cout<<"*";
}
cout<<endl;
}
return ;
}

洛谷P1101单词方阵的更多相关文章

  1. 洛谷 P1101 单词方阵

    题目链接 https://www.luogu.org/problemnew/show/P1101 题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中 ...

  2. 洛谷——P1101 单词方阵

    https://www.luogu.org/problem/show?pid=1101#sub 题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放 ...

  3. 洛谷P1101 单词方阵——S.B.S.

    题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...

  4. 洛谷P1101 单词方阵【暴力】【字符串】

    题目描述 给一n×nn \times nn×n的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 888 个方向的任一方向,同一单词摆放时不再改变方向, ...

  5. 洛谷P1101 单词方阵

    题目描述 给一nXn的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red ...

  6. 洛谷P1101 单词方阵【DFS】

    给一n \times nn×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向 ...

  7. 洛谷 P1101单词方阵

    我已经,是这个世界上,最幸福的女孩了                                                                         ——<末日时 ...

  8. 集训作业 洛谷P1101 单词方阵

    这个题的长度真的有点长,我直接放图片吧 这个题又是一个和谐的搜索,找到yizhong的y就开始8面搜索,遇见正确的字母就继续搜索,不正确就果断放弃,果然又是一个和谐的搜索呢. #include< ...

  9. 洛谷P1101 单词方针

    题目描述 给一 n×n 的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉, ...

随机推荐

  1. python学习接口测试(二)

    .python接口之http请求 python的强大之处在于提供了很多的标准库以及第三库,本文介绍urllib 和第三库的requests. Urllib 定义了很多函数和类,这些函数和类能够帮助我们 ...

  2. 2018.7.26 进程和线程的区别 &&你对 Java平台的理解

    进程和线程的区别 1.定义 进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更 ...

  3. centos开启rewrite功能

    首先找到 /etc/httpd/conf/httpd.conf 文件,然后修改以下两个地方: 1.取消下面一句的注释 LoadModule rewrite_module modules/mod_rew ...

  4. Bug分支

    软件开发中,bug就像家常便饭一样.有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除. 当你接到一个修复一 ...

  5. C#中类的声明

    一.C#中类的声明 在C#中必须先声明类,然后才能在程序中使用. 类的声明格式如下: [类的属性] [访问修饰符] class 类名称 [: 父类名]{    [成员修饰符] 类的成员变量或者成员函数 ...

  6. Windows Subsystem for Linux(WSL)安装记录

    什么是WSL Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层.它是由微软与Canoni ...

  7. xml解析之stax

    博文引自:http://zangweiren.iteye.com/blog/647334 Java 6.0对XML支持的新特性有许多方面.比如StAX.针对XML-Web服务的Java架构(JAX-W ...

  8. 统计寄存器AX中1 的个数

    ;==================================== ; 统计寄存器AX中1 的个数 DATAS segment DATAS ends CODES segment START: ...

  9. JQuery制作网页—— 第二章 JavaScript操作BOM对象

    1.window对象: 浏览器对象模型(BOM)是javascript的组成之一, 它提供了独立与浏览器窗口进行交换的对象,使用浏览器对象模型可以实现与HTML的交互. 它的作用是将相关的元素组织包装 ...

  10. html ajax请求 php 下拉 加载更多数据 (也可点击按钮加载更多)

    <input type="hidden" class="total_num" id="total" value="{$tot ...