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;
    }

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

  • 相关阅读:
    J2ME游戏开发之层:动画
    HTTPClient
    Objectc 类的定义
    python占位符介绍及操作方法
    selenium IE浏览器运行很慢解决方法
    python eval()用法
    使用MySQL执行update时报错:You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences
    python之字符串格式化(format)
    Python问题:UnboundLocalError: local variable 'xxx' referenced before assignment
    JS滚动页面操作
  • 原文地址:https://www.cnblogs.com/liuzhaojun/p/11298611.html
Copyright © 2011-2022 走看看