• 洛谷-P1101 单词方阵


    洛谷-P1101 单词方阵

    原题链接:https://www.luogu.com.cn/problem/P1101


    题目描述

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

    输入:
        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 le n le 100))。

    第二行开始输入(n imes n)的字母矩阵。

    输出格式

    突出显示单词的(n imes n)矩阵。

    输入输出样例

    输入 #1

    7
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    

    输出 #1

    *******
    *******
    *******
    *******
    *******
    *******
    *******
    

    输入 #2

    8
    qyizhong
    gydthkjy
    nwidghji
    orbzsfgz
    hhgrhwth
    zzzzzozo
    iwdfrgng
    yyyygggg
    

    输出 #2

    *yizhong
    gy******
    n*i*****
    o**z****
    h***h***
    z****o**
    i*****n*
    y******g
    

    C++代码

    #include <iostream>
    using namespace std;
    
    int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
    char a[100][100],b[100][100],c[]="yizhong";
    
    void dfs(int x, int y, int k, int m) {
        if(m==6) {
            for(;m>=0;--m) {
                b[x][y]=c[m];
                x-=dir[k][0];
                y-=dir[k][1];
            }
            return ;
        }
        x+=dir[k][0];
        y+=dir[k][1];
        if(a[x][y]==c[m+1])
            dfs(x,y,k,m+1);
    }
    
    int main() {
        int n,i,j,k,x,y;
        cin>>n;
        for(i=0;i<n;++i)
            for(j=0;j<n;++j) {
                cin>>a[i][j];
                b[i][j]='*';
            }
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                if(a[i][j]=='y')
                    for(k=0;k<8;++k)
                        dfs(i,j,k,0);
        for(i=0;i<n;++i) {
            for(j=0;j<n;++j)
                cout<<b[i][j];
            cout<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    【iOS】打印方法名
    【iOS】设备系统版本
    【iOS】receiver type *** for instance message is a forward declaration
    【iOS】获取应用程序本地路径
    hash算法
    redis文档
    Couchbase
    nodejs多核处理
    基于nodejs的消息中心
    nodejs两个例子
  • 原文地址:https://www.cnblogs.com/yuzec/p/12875005.html
Copyright © 2020-2023  润新知