博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1101 单词方阵
阅读量:6825 次
发布时间:2019-06-26

本文共 3100 字,大约阅读时间需要 10 分钟。

题目描述

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

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

输入输出格式

输入格式:

第一行输入一个数nn。(7 \le n \le 1007n100)。

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

 

输出格式:

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

输入样例#1: 
7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
输出样例#1: 
*************************************************
输入样例#2: 
8qyizhonggydthkjynwidghjiorbzsfgzhhgrhwthzzzzzozoiwdfrgngyyyygggg 输出样例#2: 
*yizhonggy******n*i*****o**z****h***h***z****o**i*****n*y******g
解析
dfs,思路比较简单,dfs时记录一下八个方向,记录到哪一个字母了,再记录当前坐标。搜索之前先找到单词的方向,注意越界判断,之后暴力搜索即可。 代码
#include
#include
#include
using namespace std;char mp[105][105];int book[105][105];int n;char word[8]={
'0','y','i','z','h','o','n','g'};bool flag;int changex[9]={
0,-1,0,1,1,1,0,-1,-1};int changey[9]={
0,1,1,1,0,-1,-1,-1,0};//八个方向 vector
vx,vy;void dfs(int xx,int yy,int num,int direct)//坐标,第几个字母,方向 { if(num>7) { int m=vx.size(); for(int i=m-1;i>=0;i--) { int a=vx[i]; int b=vy[i]; vx.pop_back(); vy.pop_back(); book[a][b]=1; } flag=true; return; } int newx=xx+changex[direct]; int newy=yy+changey[direct]; if(newx>n&&newx<1) return; if(newy>n&&newy<1) return; if(mp[newx][newy]==word[num]) { vx.push_back(newx); vy.push_back(newy); num++; dfs(newx,newy,num,direct); if(vx.size()!=0) { vx.pop_back(); vy.pop_back(); }//pop_back不要过度 } return;}int main(){ cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>mp[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(mp[i][j]=='y') { for(int k=1;k<=8;k++)//确定方向 { int newx=i+changex[k]; int newy=j+changey[k]; if(newx>n&&newx<1) continue; if(newy>n&&newy<1) continue;//越界判断 if(mp[newx][newy]=='i') { dfs(newx,newy,3,k); if(flag==true) { book[newx][newy]=1; book[newx-changex[k]][newy-changey[k]]=1; flag=false; } } } } } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(book[i][j]!=1) { mp[i][j]='*'; } cout<
 

 

 
 

转载于:https://www.cnblogs.com/KyleDeng/p/9758953.html

你可能感兴趣的文章
TensorFlow VS TensorFlow Mobile VS TensorFlow Lite
查看>>
Rust 1.34.0 发布
查看>>
《利用Python进行数据分析·第2版》第10章 数据聚合与分组运算
查看>>
flask处理网页时间
查看>>
怎么把iphoneX手机备忘录同步到OPPOFindX手机中
查看>>
使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)
查看>>
手把手教你在Mac中搭建iOS的 React Native环境
查看>>
蚂蚁金服副CTO胡喜ATEC上宣布:蚂蚁金服技术全面开放
查看>>
重读算法导论之算法基础
查看>>
《Linux命令行与shell脚本编程大全》第九章 安装软件程序
查看>>
PHP+MySQL实现对一段时间内每天数据统计优化操作实例
查看>>
openlayers3 pointermove onmousemove 显示feature信息
查看>>
一天学习使用maven
查看>>
盘点9月阿里云云计算基础产品开通新地域详情
查看>>
【python进阶】Garbage collection垃圾回收1
查看>>
详谈分布式系统缓存的设计细节
查看>>
C语言-typedef的用法
查看>>
Golang源码探索(二) 协程的实现原理
查看>>
课程目标
查看>>
记一次使用Ubuntu 14.04 LTS搭建FBctf平台
查看>>