洛谷:P1101 单词方阵

单词方阵

题目描述

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

输入格式

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

第二行开始输入 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就是无用位置,输出*即可。

cpp 复制代码
#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;
}
相关推荐
京东云开发者33 分钟前
从“会生成”到“能生产”:萤火虫 AIGC 平台的 AI Infra 实践
算法·aigc·产品
youshi666835 分钟前
PID——算法改进
算法
一只不想敲代码的程序猿2 小时前
如何更高效地拆解问题?
算法
爱写Bug的浮游3 小时前
unique_ptr 零开销的真相与边界
c++·facebook
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
微尘hjx3 小时前
【Deep-OC-SORT 02】多轨迹算法Deep-OC-SORT-相对 OC-SORT 的改进点
人工智能·算法·yolo·目标跟踪·视觉检测·ultralytics·deep-oc-sort
梦帮科技3 小时前
意识启发式量子隧穿退火算法用于全局优化 (CITA) 完整技术指南
网络·人工智能·算法·量子计算·模拟退火算法
一去不复返的通信er4 小时前
排序 + 双指针:力扣15三数之和
算法·leetcode
落樱弥城4 小时前
Perf 逐步探查性能缺口并优化
c++·性能优化
Pniubi4 小时前
力扣3无重复字符的最长字串(滑动窗口)
算法·leetcode·职场和发展