题解 P1101 【单词方阵】
先上满分代码:
#include<iostream>
#include<cstdio>
using namespace std;
char a[100][100];//存储输入用数组
int b[100][100];//染色用数组
int ax[8]={1,1,0,-1,-1,-1,0,1};
int ay[8]={0,1,1,1,0,-1,-1,-1};
//八向搜索用
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
//以上是输入
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(a[i][j]=='y')
for(int m=0;m<8;m++)//向八个方向搜索
{
int tmp_i=i,tmp_j=j;//这里新弄一个变量,放置原来的变量i、j在之后的操作中变化。
if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='i')
{
tmp_i+=ax[m];tmp_j+=ay[m];
if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='z')
{
tmp_i+=ax[m];tmp_j+=ay[m];
if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='h')
{
tmp_i+=ax[m];tmp_j+=ay[m];
if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='o')
{
tmp_i+=ax[m];tmp_j+=ay[m];
if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='n')
{
tmp_i+=ax[m];tmp_j+=ay[m];
if(a[tmp_i+ax[m]][tmp_j+ay[m]]=='g')
{
b[tmp_i+ax[m]][tmp_j+ay[m]]=1;//染色 b[tmp_i][tmp_j]=1;//染色
for(int v=0;v<5;v++)
{
tmp_i-=ax[m];tmp_j-=ay[m];
b[tmp_i][tmp_j]=1;
}
}
}
}
}
}
}
}
}
//简单易懂的输出部分
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
if(b[i][j]) cout<<a[i][j];
else cout<<'*';
cout<<endl;
}
}
原理:
先找y,然后把后面的i、z、h、o、n、g全找了,成片的if判断下就够了。
找完了以后染色。b数组就是为了染色而开的。
我可能没有用到深搜思想qwq
好像也没什么能扯的了……
向大佬们致敬
题目地址:https://www.luogu.com.cn/problem/P1101
洛谷那边不让交题解,果然是这题太简单了了嘛……
版权归属于東雲寺貍(E-Mail:woldninedoor@outlook.com)
转载请附出处。