题目描述

给一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. Lniux下安装mysql----编译版

    ####安装mysql-5.7.10rpm -e --nodeps mysqlrpm -e mysqlclient10useradd -g mysql -s /sbin/nologininstall_ ...

  2. 关于IO流代码BufferedReader

    package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...

  3. javascript编程代码笔记

    1. 快速排序算法 方法一 function quicksort(n,left,right){ var p; if(left<right){ p = position(n,left,right) ...

  4. Oracle之plsql快速入门

    打开系统输出 set serveroutput on; 只需要打开一次**书写格式 以斜杠/号 结束(基本结构) --declare --语句后面必须以;号结束 declare --用来区分变量名和表 ...

  5. 看懂 ,学会 .NET 事件的正确姿势

    一.事件的本质       举个例子你是个取向正常的青年男性,有个身材火辣,年轻貌美,腿长肤白的美女,冲你一笑,给你讲了一个ABCD羊吃草的故事.你有什么反应?可能你关注点在于颜值,身材,故事,故事含 ...

  6. Ajax的简单实用实例

    我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图:

  7. Nginx安装部署与测试

    场景:项目需要部署在生产环境中,这些新的工具都需要在生产环境中去实践练习.有时间再部署一套ELK的日志分析系统,这样的系统才算具有一定的应用价值. 1 Nginx安装 用root用户安装,采用源代码编 ...

  8. (转)Maven项目标准目录结构

    场景:工作中的项目都是使用Maven的目录结构,虽然能够如期的完成开发工作,但是对于一个Maven工程的配置却并不熟悉,这里主要介绍下Maven工程的而目录结构. 1 标准目录结构 src -main ...

  9. Web测试与APP测试有哪些异同?

    1.相同点 不管是传统行业的web测试,还是新兴的手机APP测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中. 1)设计测试用例时,依然都是依据边界值分析法.等价类划分等 ...

  10. 流畅python学习笔记:第十五章:上下文管理器

    在开始本章之前,我们首先来谈谈try-excep..final模块.在Python中,进行异常保护的最多就是用try..except..final.首先来看下下面的代码.进行一个简单的除法运算.为了防 ...