洛谷:P1101 单词方阵

news/2024/9/12 6:11:20 标签: 算法, 图论, c++

单词方阵

题目描述

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

输入格式

第一行输入一个数 n n n ( 7 ≤ n ≤ 100 ) (7 \le n \le 100) (7n100)

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

输出格式

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

样例 #1

样例输入 #1

7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa

样例输出 #1

*******
*******
*******
*******
*******
*******
*******

样例 #2

样例输入 #2

8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg

样例输出 #2

*yizhong
gy******
n*i*****
o**z****
h***h***
z****o**
i*****n*
y******g

dfs

这个题感觉应该用dfs,不过在写dfs中可以有不同写法,此处我现在主函数找到y在进dfs搜索,把y的8个方向全试一遍,有的话就更改到vis数组中。

最后输出的时候vis的位置如果是0就是无用位置,输出*即可。

#include<bits/stdc++.h>
//#include<iostream>
//#include<iomanip>
//#include<vector>
//#include<queue>
//#include<algorithm>
#define rep(i,l,r) for(int i=l;i<=r;i++)
using namespace std;
#define pii pair<int,int>
#define endl '\n'
const int M=2e5+7;
char  a[200][200];
char vis[200][200];
int dx[8]={-1,0,1,0, -1,1,1,-1};
int dy[8]={0,1,0,-1, 1,1,-1,-1  };
int n,m;
//int qix,qiy,zx,zy;
int ant=0;
string s="yizhong";
vector<pii> v;
void  dfs(int x,int y)
{
 for(int i=0;i<8;i++)
 {
    v.push_back({x,y});  //将坐标放进数组,最后若满足再更改
    int xx=x+dx[i],yy=y+dy[i];
    int j=1;
     while(xx>0&&xx<=n&&yy>0&&yy<=n&&j<7&&s[j]==a[xx][yy])
     {//注意边界条件在界内
         v.push_back({xx,yy});
         xx+=dx[i],yy+=dy[i];
        j++;
     }
    
   if(j>=7){
     for(int i=0;i<v.size();i++)
      {
        int fir=v[i].first,sec=v[i].second;
        vis[fir][sec]=s[i];
      }
    }
  v.clear();  //清空,方便下一次搜索
 }
}


int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
rep(i,1,n)rep(j,1,n)cin>>a[i][j];

rep(i,1,n)rep(j,1,n)
{
  if(a[i][j]=='y')
  dfs(i,j);
}

rep(i,1,n)
{rep(j,1,n)
{
  if(vis[i][j]==0)cout<<'*';
  else cout<<vis[i][j];
}
cout<<endl;
}
return 0;
}


http://www.niftyadmin.cn/n/5610691.html

相关文章

Vue中<style scoped>与<style module>的深入解析与应用

在Vue开发中&#xff0c;样式管理是一个重要的环节。Vue提供了多种方式来帮助开发者更有效地管理组件样式&#xff0c;其中<style scoped>和<style module>是两个非常实用的特性。本文将深入探讨这两个属性的作用、原理以及使用场景&#xff0c;帮助读者更好地理解…

linux Shell 脚本 输出日志文件 log /dev/null

linux Shell 脚本 输出日志文件 log shell 错误输出重定向到标准输出 https://www.jb51.net/article/264888.htm shell 错误输出重定向到标准输出 和<是文件重定向符。那么1和2是什么&#xff1f; shell中每个进程都和三个系统文件相关联 标准输入stdin 标准输出stdout 标…

html+css网页设计 淘宝登录页面

htmlcss网页设计 淘宝登录页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff0c;访…

uniapp中节点信息的使用

uni.createSelectorQuery() 需要在生命周期 mounted 后进行调用 返回一个 SelectorQuery 对象实例。可以在这个实例上使用 select 等方法选择节点&#xff0c;并使用 boundingClientRect 等方法选择需要查询的信息。 // util.js // 封装获取dom的方法并导出使用 export funct…

统一应用权限管理平台(UAP):权限管理散、乱、慢?小问题

随着数字化转型持续深入&#xff0c;企业以各种业务应用为载体&#xff0c;不断提升业务的数字化水平。当业务应用越来越多&#xff0c;企业的IT系统日益复杂、数据资源变得分散&#xff0c;对于权限管理的要求也越来越高。如果权限管理得当&#xff0c;企业可以安全与效率兼顾…

【云原生】Kubernetes中的名称空间和资源配额详细用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

使用HTML和cgi控制I.MX6ULL开发板上的LED

一.HTML文件 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>LED_device</title> </head><body><form action"/cgi-bin/led.cgi" method"post"><p>LED设备号</…

AI写小说第四天

### 迷雾中的时光&#xff08;续&#xff09; 李婉的再次出现让小镇的气氛更加紧张。她手中握着一份新的证据&#xff0c;声称这将揭示林默的真实身份。苏晴感到一阵不安&#xff0c;但她决定不让恐惧主导自己。 “你到底想要什么&#xff1f;”苏晴冷静地问道&#xff0c;目…