zoukankan      html  css  js  c++  java
  • P1101 单词方阵

    题目描述

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

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

    输入格式

    第一行输入一个数nn。(7 le n le 1007n100)。

    第二行开始输入n imes nn×n的字母矩阵。

    输出格式

    突出显示单词的n imes nn×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
    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int inf=105;
    int a[inf][inf],n;
    char str[inf][inf];
    string s="yyizhong";
    struct node{
        int x,y;
    }c[inf];
    void dfs(int x,int y,int step,int k,int k1)
    {
        if(x>n||x<1||y>n||y<1)
        return ;
        if(step==8)
        {
            for(int i=1;i<8;i++)
            {
                a[c[i].x][c[i].y]=1;
            }
            return ;    
        }
            int x2=x+k;
            int y2=y+k1;
            if(str[x2][y2]==s[step])
            {
                c[step].x=x2;
                c[step].y=y2;
                dfs(x2,y2,step+1,k,k1);
            }        
    }
    int main()
    {
        int x1[]={1,-1,0,0,-1,-1,1,1};
        int y1[]={0,0,-1,1,-1,1,-1,1};
        cin>>n;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                cin>>str[i][j];
            }
        fill(a[0],a[0]+inf*inf,0);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                if(str[i][j]=='y')
                {
                        c[1].x=i;
                        c[1].y=j;
                        for(int m=0;m<8;m++)
                        {    
                        int x2=i+x1[m];
                        int y2=j+y1[m];
                        if(str[x2][y2]==s[2])
                        {
                        c[2].x=x2;
                        c[2].y=y2;
                        dfs(x2,y2,3,x1[m],y1[m]);
                        }    
                        }
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(a[i][j]==1)
                cout<<str[i][j];
                else
                cout<<'*';
            }
            cout<<endl;
        }
        return 0;
    }

    还以为会超时,没想到过了

  • 相关阅读:
    线程同步的几种实现方案
    关于java中三种初始化块的执行顺序
    java数组
    Codeblocks 17汉化
    聚焦天狗
    linux下搭建svn添加多个仓库(项目)
    使用Python在windows环境下获取Linux服务器的磁盘、内存等信息
    python smtplib使用163发送邮件 报错 554 DT:SPM
    防抖与节流
    js
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11298611.html
Copyright © 2011-2022 走看看