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 1007≤n≤100 )。

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

    输出格式:
    突出显示单词的 n imes nn×n 矩阵。

    输入输出样例
    输入样例#1:
    7
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    aaaaaaa
    输出样例#1:

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

    题解: DFS,每次直接固定方向的搜索。

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN=110;
    char mapp[MAXN][MAXN];
    int vis[MAXN][MAXN];
    int ans[MAXN][MAXN];
    char str[]={"yizhong"};
    int n;
    int dx[8]={1,-1,0,0,1,1,-1,-1};
    int dy[8]={0,0,1,-1,1,-1,-1,1};
    bool check(int x,int y,int k)
    {
        if(x<0||x>=n||y<0||y>n||mapp[x][y]!=str[k])
            return false;
        return true;
    }
    void print()//此处是记录那些点是可以构成yizhong
    {
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(vis[i][j]==1)
                    ans[i][j]++;
            }
        }
    }
    void dfs(int x,int y ,int mx,int my,int k)
    {
        if(k==6&&mapp[x][y]=='g') {
            vis[x][y]=1;
            print();
            vis[x][y]=0;
            return ;
        }
        int kx=x+mx;
        int ky=y+my;
        if(check(kx,ky,k+1)){
            vis[kx][ky]=1;
            dfs(kx,ky,mx,my,k+1);
            vis[kx][ky]=0;
        }
    
    
    }
    int main() {
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%s",mapp[i]);
        memset(vis,0, sizeof(vis));
        memset(ans,0, sizeof(ans));
        for(int i=0;i<n;i++) {
            for(int j=0;j<n;j++) {
                if(mapp[i][j]=='y') {
                    for(int k=0;k<8;k++) {
                        vis[i][j] = 1;
                        dfs(i, j,dx[k],dy[k] ,0);
                        vis[i][j] = 0;
                    }
                }
            }
        }
        for(int i=0;i<n;i++){
            for (int j = 0; j < n; ++j) {
                if(ans[i][j]>=1)
                    printf("%c",mapp[i][j]);
                else
                    printf("*");
            }
            printf("
    ");
        }
    
        return 0;
    }
    
    /*
    8
    qyizhong
    gydthkjy
    nwidghji
    orbzsfgz
    hhgrhwth
    zzzzzozo
    iwdfrgng
    yyyygggg
     */
  • 相关阅读:
    linux安装tmux分屏插件
    美化linux客户端zsh和oh-my-zsh
    使用Feign通过服务名调用服务,找不到服务
    Docker Compose 配置文件详解
    Dockerfile构建jar镜像
    Mysql数据库主从同步
    【Java】Java划水练习
    【2-SAT】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) D. Innokenty and a Football League
    【贪心】【DFS】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) C. Andryusha and Colored Balloons
    【三分】Codeforces Round #403 (Div. 2, based on Technocup 2017 Finals) B. The Meeting Place Cannot Be Changed
  • 原文地址:https://www.cnblogs.com/-xiangyang/p/9220234.html
Copyright © 2011-2022 走看看