题目描述

给一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的更多相关文章

  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】单词方阵

    题目大意:给一 \(n \times n\) 的字母方阵,内可能蕴含多个 \("yizhong"\) 单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 8 个方向的任一方向, ...

  6. 洛谷P1101单词方阵

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

  7. 洛谷P1101 单词方阵

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

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

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

  9. 洛谷 P1101单词方阵

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

随机推荐

  1. JS实现全选、不选、反选

    思路:1.获取元素.2.用for循环历遍数组,把checkbox的checked设置为true即实现全选,把checkbox的checked设置为false即实现不选.3.通过if判断,如果check ...

  2. 静态变量和Session

    静态变量: Application级别的,不同客户端访问同一个变量. Session:对于每个访问的客户端是独立的,都有一个唯一的SessionID.也就是说,不同客户端下,都可以有一个Session ...

  3. Android Studio 运行java程序

    当我们装了Android Studio 学习安卓开发的时候,难免会要学习java,这时候,难道在重新装一个编译器吗?不需要,我们直接用 Android Studio 就可以. 1.新建一个空项目,选择 ...

  4. Python中字典和集合

    Python中字典和集合 映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元 ...

  5. [图形学] Chp8.7.2 梁友栋-Barsky线段裁剪算法

    这节简单介绍了梁友栋-Barsky裁剪算法的原理,只有结论并没有过程,看过http://blog.csdn.net/daisy__ben/article/details/51941608这篇文章后,大 ...

  6. 线程池与Threadlocal

    线程池与Threadlocal 线程池: 线程池是为了使线程能够得到循环的利用,线程池里面养着一些线程,有任务需要使用线程的时候就往线程池里抓线程对象出来使用.线程池里的线程能够重复使用,所以在资源上 ...

  7. Struts2从头到脚--学习笔记(自认为比较重要的)

    一. Struts2框架介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与 ...

  8. Jenkins2 实现持续交付初次演练(MultiJob,Pipeline,Blue Ocean)

    背景 项目需要用到自动部署,但可获取外网的节点机器只有一台,那只能同过主节点机器进行构建完成然后分发至对应服务器进行启动更新. 目前已尝试过三种方式: 1.Pipeline-Trigger param ...

  9. 项目中ApplicationContext

    applicationContext说白了就是对beanFactory的扩展,也就是一个spring容器,而且applicationContext是单例的,项目中主要包含一个webApplicatio ...

  10. 关于bootstrap的一些想法

    老实说,作为一个前端人员,我不怎么会去用bootstrap,但是我会去看,会去了解. 首先,bootstrap其实是给后台以及前端新人用来快速完成一个页面的简单布局,不是按照设计稿psd格式给定做的那 ...