题解 P1101 【单词方阵】

· · 题解

很水的一道题。

如果dfs不会的话,完完全全可以打表的嘛(说的我好像会dfs似的)!

思路:

就是把不是‘y’,‘i’,‘z’,‘h’,‘o’,‘n’,‘g’这七个字符的字符标记0,等一下输出的时候输出‘’。 然后再去看字符,先找到‘y’,可以从八个方向枚举一下,看是不是‘yizhong’,如果是的话就标记1,等下输出的时候不输出‘’。 代码实现:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
/*
    1,5   2,5   3,5
    1,4   2,4   3,4
    1,3   2,3     3,3
    1,2   2,2   2,2
    1,1   2,1   3,1
*/
int n;
char ch[101][101];
bool a[101][101];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) {
            cin>>ch[i][j];//不是y i z h o n g的标记 
            if(ch[i][j]=='a' || ch[i][j]=='b' || ch[i][j]=='c' || ch[i][j]=='d' || ch[i][j]=='e' || ch[i][j]=='f' || ch[i][j]=='j' || ch[i][j]=='k' || ch[i][j]=='l' || ch[i][j]=='m' || ch[i][j]=='p' || ch[i][j]=='q' || ch[i][j]=='r' || ch[i][j]=='s' || ch[i][j]=='t' || ch[i][j]=='u' || ch[i][j]=='v'|| ch[i][j]=='w' || ch[i][j]=='x')
                a[i][j]=0;
        }
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n;j++) {  //分别八个方向打表模拟 
            if(ch[i][j]=='y') {
                if(ch[i][j+1]=='i')// 0  1
                    if(ch[i][j+2]=='z')
                        if(ch[i][j+3]=='h')
                            if(ch[i][j+4]=='o')
                                if(ch[i][j+5]=='n')
                                    if(ch[i][j+6]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i][j+k]=1;
                if(ch[i+1][j]=='i')// 1  0
                    if(ch[i+2][j]=='z')
                        if(ch[i+3][j]=='h')
                            if(ch[i+4][j]=='o')
                                if(ch[i+5][j]=='n')
                                    if(ch[i+6][j]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i+k][j]=1;
                if(ch[i][j-1]=='i')// 0 -1
                    if(ch[i][j-2]=='z')
                        if(ch[i][j-3]=='h')
                            if(ch[i][j-4]=='o')
                                if(ch[i][j-5]=='n')
                                    if(ch[i][j-6]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i][j-k]=1;
                if(ch[i+1][j+1]=='i')// 1 1
                    if(ch[i+2][j+2]=='z')
                        if(ch[i+3][j+3]=='h')
                            if(ch[i+4][j+4]=='o')
                                if(ch[i+5][j+5]=='n')
                                    if(ch[i+6][j+6]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i+k][j+k]=1;
                if(ch[i-1][j-1]=='i')// -1 -1
                    if(ch[i-2][j-2]=='z')
                        if(ch[i-3][j-3]=='h')
                            if(ch[i-4][j-4]=='o')
                                if(ch[i-5][j-5]=='n')
                                    if(ch[i-6][j-6]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i-k][j-k]=1;
                if(ch[i-1][j+1]=='i')// -1 1
                    if(ch[i-2][j+2]=='z')
                        if(ch[i-3][j+3]=='h')
                            if(ch[i-4][j+4]=='o')
                                if(ch[i-5][j+5]=='n')
                                    if(ch[i-6][j+6]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i-k][j+k]=1;
                if(ch[i-1][j]=='i')// -1  0
                    if(ch[i-2][j]=='z')
                        if(ch[i-3][j]=='h')
                            if(ch[i-4][j]=='o')
                                if(ch[i-5][j]=='n')
                                    if(ch[i-6][j]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i-k][j]=1;
                if(ch[i+1][j-1]=='i')// 1 -1
                    if(ch[i+2][j-2]=='z')
                        if(ch[i+3][j-3]=='h')
                            if(ch[i+4][j-4]=='o')
                                if(ch[i+5][j-5]=='n')
                                    if(ch[i+6][j-6]=='g')
                                        for(int k=0;k<=6;k++)
                                            a[i+k][j-k]=1;
            }
        }
    }
    for(int i=1;i<=n;i++) {//输出 
        for(int j=1;j<=n;j++) {
            if(a[i][j]==0)
                printf("*");
            else
                printf("%c",ch[i][j]);
        }
        printf("\n");
    }
    return 0;
}