• luogu 1101单词方阵


    题目描述

    给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如:

    输入:
        8                     输出:
        qyizhong              *yizhong
        gydthkjy              gy******
        nwidghji              n*i*****
        orbzsfgz              o**z****
        hhgrhwth              h***h***
        zzzzzozo              z****o**
        iwdfrgng              i*****n*
        yyyygggg              y******g

    输入输出格式

    输入格式:

    第一行输入一个数n。(7<=n<=100)。

    第二行开始输入nXn的字母矩阵。

    输出格式:

    突出显示单词的nXn矩阵。

    输入输出样例

    输入样例#1:
    7
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    
    输出样例#1:
    *******
    *******
    *******
    *******
    *******
    *******
    *******
    
     
    //记录每个 y 的位置,将每个 y 进行一次深搜,8 个方向
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    const int N=110;
    const char s[]={' ','y','i','z','h','o','n','g'};
    
    char c[N][N],my;
    int a[N][N];
    int n;
    struct node{
        int x,y;
    }E[N*N];
    int js;
    
    inline int read()
    {
        int x=0;char c=getchar();
        while(c<'0'||c>'9')c=getchar();
        while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
        return x;
    }
    
    void bfs(int num)
    {
            int x=E[num].x,y=E[num].y;
            if(x>=7)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x-i][y]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x-i][y]=3;
            }
            if(n-x>=6)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x+i][y]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x+i][y]=3;    
            }
            if(y>=7)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x][y-i]!=s[i+1])
                        flag=0;
                for(int i=0;i<=6&&flag;i++)
                    a[x][y-i]=3;
            }
            if(n-y>=6)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x][y+i]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x][y+i]=3;
            }
            if(x>=7&&y>=7)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x-i][y-i]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x-i][y-i]=3;
            }
            if(n-x>=6&&y>=7)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x+i][y-i]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x+i][y-i]=3;
            }
            if(x>=7&&n-y>=6)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x-i][y+i]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x-i][y+i]=3;
            }
            if(n-x>=6&&n-y>=6)
            {
                bool flag=1;
                for(int i=1;i<=6&&flag;i++)
                    if(c[x+i][y+i]!=s[i+1])
                        flag=0;
                for(int i=0;flag&&i<=6;i++)
                    a[x+i][y+i]=3;    
            }
            return ; 
    } 
    
    int main()
    {
        n=read();
        scanf("%c",&my);
        
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                cin>>my;
                c[i][j]=my;
                if(my=='y')
                    E[++js].x=i,E[js].y=j;
            }
            
        for(int i=1;i<=js;i++)
            bfs(i);
            
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                if(a[i][j]==3)
                    printf("%c",c[i][j]);
                else
                    printf("*");
            printf("
    ");
        }
        
        return 0;
    }
    /*
    8                 
    qyizhong
    gydthkjy
    nwidghji
    orbzsfgz
    hhgrhwth
    zzzzzozo
    iwdfrgng
    yyyygggg
    */
  • 相关阅读:
    Java中的匿名对象、内部类、包、代码块
    Java中的final和static关键字
    Java中的this与super关键字
    Java中的构造方法
    Java中的多态
    Vue+Element中Table懒加载,新增、删除操作后手动更新
    JQ取消hover事件
    github.com访问慢解决
    vue cli3 子目录问题
    右键事件 contextmenu
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/7100712.html
Copyright © 2020-2023  润新知