题解 P1101 【单词方阵】

· · 题解

#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开头的单词就搜不到。 (小牛题解,不喜勿喷)