题解 P1101 【单词方阵】
marshmello1 · · 题解
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[101][101];
bool b[101][101];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j]=='y')
if(a[i][j+1]=='i')
if(a[i][j+2]=='z')
if(a[i][j+3]=='h')
if(a[i][j+4]=='o')
if(a[i][j+5]=='n')
if(a[i][j+6]=='g')
{
for(int z=0;z<=6;z++)
b[i][j+z]=true;
}
if(a[i][j]=='y')
if(a[i+1][j]=='i')
if(a[i+2][j]=='z')
if(a[i+3][j]=='h')
if(a[i+4][j]=='o')
if(a[i+5][j]=='n')
if(a[i+6][j]=='g')
{
for(int z=0;z<=6;z++)
b[i+z][j]=true;
}
if(a[i][j]=='y')
if(a[i+1][j+1]=='i')
if(a[i+2][j+2]=='z')
if(a[i+3][j+3]=='h')
if(a[i+4][j+4]=='o')
if(a[i+5][j+5]=='n')
if(a[i+6][j+6]=='g')
{
for(int z=0;z<=6;z++)
b[i+z][j+z]=true;
}
if(a[i][j]=='y')
if(a[i-1][j]=='i')
if(a[i-2][j]=='z')
if(a[i-3][j]=='h')
if(a[i-4][j]=='o')
if(a[i-5][j]=='n')
if(a[i-6][j]=='g')
{
for(int z=0;z<=6;z++)
b[i-z][j]=true;
}
if(a[i][j]=='y')
if(a[i][j-1]=='i')
if(a[i][j-2]=='z')
if(a[i][j-3]=='h')
if(a[i][j-4]=='o')
if(a[i][j-5]=='n')
if(a[i][j-6]=='g')
{
for(int z=0;z<=6;z++)
b[i][j-z]=true;
}
if(a[i][j]=='y')
if(a[i-1][j-1]=='i')
if(a[i-2][j-2]=='z')
if(a[i-3][j-3]=='h')
if(a[i-4][j-4]=='o')
if(a[i-5][j-5]=='n')
if(a[i-6][j-6]=='g')
{
for(int z=0;z<=6;z++)
b[i+z][j+z]=true;
}
if(a[i][j]=='y')
if(a[i+1][j-1]=='i')
if(a[i+2][j-2]=='z')
if(a[i+3][j-3]=='h')
if(a[i+4][j-4]=='o')
if(a[i+5][j-5]=='n')
if(a[i+6][j-6]=='g')
{
for(int z=0;z<=6;z++)
b[i+z][j-z]=true;
}
if(a[i][j]=='y')
if(a[i-1][j+1]=='i')
if(a[i-2][j+2]=='z')
if(a[i-3][j+3]=='h')
if(a[i-4][j+4]=='o')
if(a[i-5][j+5]=='n')
if(a[i-6][j+6]=='g')
{
for(int z=0;z<=6;z++)
b[i-z][j+z]=true;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(b[i][j]==true)
cout<<a[i][j];
else
cout<<"*";
}
cout<<endl;
}
return 0;
}
这是个毒瘤的方法,说白了就是在一个同样的方向不断去搜,然后标记。这个方法千万不能直接在输入的字符上更改,否则如果有几个共用一个y开头的单词就搜不到。 (小牛题解,不喜勿喷)