洛谷 P1101 单词方阵

给一n×n的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:

 

输入:8                    输出:qyizhong            *yizhonggydthkjy            gy******nwidghji            n*i*****orbzsfgz            o**z****hhgrhwth            h***h***zzzzzozo            z****o**iwdfrgng            i*****n*yyyygggg            y******g

 

输入输出格式

输入格式:

第一行输入一个数n。(7≤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

 

提供两种解法 一种是dfs 一种是暴力 要是只想把这个题ac掉的话直接往下看暴力法就好了 想练一练dfs的可以好好看看解法一

解法一(dfs):

 

#include<bits/stdc++.h>using namespace std;char m[105][105],a[]="yizhong",ans[105][105];
int n,f[2][8]={1,1,1,0,0,-1,-1,-1,1,0,-1,1,-1,1,0,-1};void dfs(int x,int y,int k,int p)  //x y 为当前坐标 k代表朝哪个方向搜 p代表是这个方向上的第几个字母
{int i;if(p==6) {for(i=p;i>=0;i--)ans[x-i*f[0][k]][y-i*f[1][k]]=a[6-i];    //我用ans数组保存要输出的“地图”,如果有符合的字符串就记录到ans里return;}else if(m[x+f[0][k]][y+f[1][k]]==a[p+1])     dfs(x+f[0][k],y+f[1][k],k,p+1);          //沿着k方向搜 由于不会转向别的方向 所以不需要vis数组判断是否已经经过这个点 这是和其他的dfs区别最大的地方else return;    
}int main()
{int i,j,k;cin>>n;for(i=0;i<n;i++)cin>>m[i];for(i=0;i<n;i++)for(j=0;j<n;j++)ans[i][j]='*';     //对ans数组初始化 全部设为“*”for(i=0;i<n;i++)for(j=0;j<n;j++){if(m[i][j]=='y')for(k=0;k<8;k++){dfs(i,j,k,0);}}for(i=0;i<n;i++){for(j=0;j<n;j++)cout<<ans[i][j];cout<<endl;}
}

 

解法二(暴力):

#include<iostream>
#include<cstdio>
using namespace std;
string s[111],ans[111];
const int a[8]={0,-1,-1,-1,0,1,1,1},b[8]={1,1,0,-1,-1,-1,0,1};
int t1,t2,kk,k,i,j,n;
bool bb;
int main()
{cin>>n;for (i=1; i<=n; i++) cin>>s[i];for (i=1; i<=n; i++)for (j=1; j<=n; j++)ans[i]+='0';for (i=1; i<=n; i++)for (j=0; j<=n-1; j++)if (s[i][j]=='y') {for (k=0; k<=7; k++){t1=i;  t2=j;bb=1;for (kk=1; kk<=6; kk++){t1+=a[k]; t2+=b[k];if (t1<1||t1>n||t2<0||t2>n-1) bb=0;if (bb==0) break;if (kk==1&&s[t1][t2]!='i') bb=0;if (kk==2&&s[t1][t2]!='z') bb=0;if (kk==3&&s[t1][t2]!='h') bb=0;if (kk==4&&s[t1][t2]!='o') bb=0;if (kk==5&&s[t1][t2]!='n') bb=0;if (kk==6&&s[t1][t2]!='g') bb=0;} t1=i; t2=j;if (bb) for (kk=0; kk<=6; kk++) ans[t1][t2]=s[t1][t2],t1+=a[k],t2+=b[k];}}for (i=1; i<=n; i++)for (j=0; j<=n-1; j++)if (ans[i][j]=='0') ans[i][j]='*';for (i=1; i<=n; i++)cout<<ans[i]<<endl;return 0;
}

 

解法二是别人的题解 直接拿来用了 可以更优化一点的 不过没必要了 都可以ac

 

转载于:https://www.cnblogs.com/dyhaohaoxuexi/p/10617250.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从头学习计算机网络_如何从头开始构建三层神经网络

从头学习计算机网络by Daphne Cornelisse达芙妮康妮莉丝(Daphne Cornelisse) 如何从头开始构建三层神经网络 (How to build a three-layer neural network from scratch) In this post, I will go through the steps required for building a three layer neural network. I’…

python 文件处理

f open(chenli.txt) #打开文件 first_line f.readline() print(first line:,first_line) #读一行 print(我是分隔线.center(50,-)) data f.read() # 读取剩下的所有内容,文件大时不要用 print(data) #打印读取内容f.close() #关闭文件1…

第五章 MVC之Bundle详解

一、简述 Bundle&#xff0c;英文原意就是捆、收集、归拢。在MVC中的Bundle技术&#xff0c;也就是一个对css和js文件的捆绑压缩的技术。 它的用处&#xff1a; 将多个请求捆绑为一个请求&#xff0c;减少服务器请求数 压缩javascript&#xff0c;css等资源文件&#xff0c;减小…

所给服务器端程序改写为能够同时响应多个客户端连接请求的服务器程序_一文读懂客户端请求是如何到达服务器的...

点击上方“蓝色字体”&#xff0c;选择 “设为星标”关键讯息&#xff0c;D1时间送达&#xff01;互联网是人类历史上最伟大的发明创造之一&#xff0c;而构成互联网架构的核心在于TCP/IP协议。那么TCP/IP是如何工作的呢&#xff0c;我们先从数据包开始讲起。1、数据包一、HTTP…

消息服务器 推送技术,SSE服务器推送技术

SSE即 server send event 服务器发送事件&#xff0c;在在早期可能会使用ajax向服务器轮询的方式&#xff0c;使浏览器第一时间接受到服务器的消息&#xff0c;但这种频率不好控制&#xff0c;消耗也比较大。但是对于SSE来说&#xff0c;当客户端向服务端发送请求&#xff0c;服…

Contest2162 - 2019-3-28 高一noip基础知识点 测试5 题解版

传送门 T1 单调栈 按照b排序 在家每一个物品时&#xff0c;判断一下a和b的关系 如果s[sta[top]].a>s[i].b&#xff0c;就弹栈 记录所有时候的height&#xff0c;并取最大值 T2 单调栈裸题 单调栈是干什么的&#xff1f;&#xff1f; 单调栈是记录一个数的一侧的第一个比他大…

在package.json里面的script设置环境变量,区分开发及生产环境。注意mac与windows的设置方式不一样...

在package.json里面的script设置环境变量&#xff0c;区分开发及生产环境。 注意mac与windows的设置方式不一样。 "scripts": {"publish-mac": "export NODE_ENVprod&&webpack -p --progress --colors","publish-win": "…

leetcode 978. 最长湍流子数组(动态规划)

978. 最长湍流子数组 当 A 的子数组 A[i], A[i1], …, A[j] 满足下列条件时&#xff0c;我们称其为湍流子数组&#xff1a; 若 i < k < j&#xff0c;当 k 为奇数时&#xff0c; A[k] > A[k1]&#xff0c;且当 k 为偶数时&#xff0c;A[k] < A[k1]&#xff1b; 或 …

人工智能取代工作_人工智能正在取代人们的工作-开发人员是下一个吗?

人工智能取代工作I was recently asked to comment on whether there was any point in becoming a developer right now, because AI might be doing your job very soon.最近有人要求我评论一下现在成为开发人员是否有任何意义&#xff0c;因为AI可能很快就会完成您的工作。 …

python类self_Python类中的self到底是干啥的

Python编写类的时候&#xff0c;每个函数参数第一个参数都是self&#xff0c;一开始我不管它到底是干嘛的&#xff0c;只知道必须要写上。后来对Python渐渐熟悉了一点&#xff0c;再回头看self的概念&#xff0c;似乎有点弄明白了。首先明确的是self只有在类的方法中才会有&…

PHP中关于取模运算及符号

执行程序段<?php echo 8%(-2) ?>&#xff0c;输出结果是&#xff1a; %为取模运算&#xff0c;以上程序将输出0 $a%$b,其结果的正负取决于$a的符号。 echo ((-8)%3); //将输出-2 echo (8%(-3)); //将输出2转载于:https://www.cnblogs.com/457248499-qq-com/p…

[pytorch] Pytorch入门

Pytorch入门 简单容易上手&#xff0c;感觉比keras好理解多了&#xff0c;和mxnet很像&#xff08;似乎mxnet有点借鉴pytorch&#xff09;&#xff0c;记一记。 直接从例子开始学&#xff0c;基础知识咱已经看了很多论文了。。。 import torch import torch.nn as nn import to…

无线服务器密码让别人改了,wifi密码被改了怎么办_wifi密码被别人改了怎么办?-192路由网...

wifi密码被别人改了怎么办&#xff1f;wifi密码之所以被别人修改&#xff0c;是因为其他人知道了你路由器的登录密码。所以&#xff0c;如果发现自己wifi密码被别人修改了&#xff0c;应该立刻登录到路由器设置界面&#xff0c;修改路由器登录密码、修改wifi密码、并调整wifi加…

[archlinux][hardware] 查看SSD的使用寿命

因为最近把16GB的SSD做成了HDD的cache&#xff0c;所以比较关系寿命问题。 使用smartctl工具。 参考&#xff1a;https://www.v2ex.com/t/261373 linux 下面只有 smartmontools 这一个工具&#xff0c;而且只对像三丧和 intel 这样的大厂支持良好&#xff0c;其余的厂家文档不全…

leetcode174. 地下城游戏(动态规划)

一些恶魔抓住了公主&#xff08;P&#xff09;并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士&#xff08;K&#xff09;最初被安置在左上角的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正…

如何设置Windows版Go —快速简便的指南

by Linda Gregier琳达格雷格(Linda Gregier) Another great language to add to your full-stack developer tool belt is the simple and productive general-purpose programming language of Go.添加到您的全栈开发人员工具带中的另一种很棒的语言是Go的简单而高效的通用编…

python计算现场得分_浅谈用 Python 计算文本 BLEU 分数

浅谈用 Python 计算文本 BLEU 分数BLEU, 全称为 Bilingual Evaluation Understudy(双语评估替换), 是一个比较候选文本翻译与其他一个或多个参考翻译的评价分数尽管 BLEU 一开始是为翻译工作而开发, 但它也可以被用于评估文本的质量, 这种文本是为一套自然语言处理任务而生成的…

Unity的几个特殊文件夹

1.以.开头的文件夹会被unity忽略&#xff0c;资源不会被导入&#xff0c;脚本不会编译。 2.Standard Assets和Pro Standard Assets&#xff1a;在这个文件夹中的脚本最先被编译。 3.Editor&#xff1a;以Editor命名的文件夹允许其中的脚本访问Unity Editor的API。如果脚本中使用…

怎么上传文件到kk服务器,VS Code 关于SFTP上传文件到多服务器的配置

工欲善其事&#xff0c;必先利其器&#xff01;刚学前端的时候一直用的DW来编写代码&#xff0c;其功能非常强大&#xff0c;但在Linux下不能用&#xff0c;所以就转VS Code了。但是刚开始使用VS Code的时候&#xff0c;很多DW上的功能需要自己安装扩展&#xff0c;并配置才可以…

CentOS7 Firewall NAT 及端口映射

本节介绍用CentOS7的Firewalll来做NAT以及端口映射实验拓扑:因为我的环境里CentOS7上有KVM虚拟机需要共享网卡上网&#xff0c;所以我把网卡都添加到了桥里面&#xff0c;当然这里也可以不用桥&#xff0c;直接用物理网口&#xff1b;用nmcli创建桥&#xff0c;并添加网口到桥&…