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

    明明是一道水题,我还找不出 bug 来。。。原本在 DFS 途中记录单词串,只好使用笨方法,在结尾加一个 for 记录单词串。终于过了。

    思路:枚举图中每一个点进行 DFS,途中判断访问的点是否为连续元素(“yizhong”字符串中连续),如果不是返回;进行下一层 DFS,如果返回值 True 则直接层层返回 True,强行退出。

     1 /* P1101 单词方阵
     2  * Au: GG
     3  */
     4 #include <cstdio>
     5 #include <cstdlib>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <ctime>
     9 #include <iostream>
    10 #include <algorithm>
    11 using namespace std;
    12 const int N = 103;
    13 int n, dir[8][2] = {
    14     {-1, -1}, {-1, 0}, {-1, 1}, {0, -1},
    15     {0, 1}, {1, -1}, {1, 0}, {1, 1}
    16 };
    17 char g[N][N], str[] = "yizhong"; // 强行空出 str[0]
    18 bool v[N][N];
    19 
    20 inline char read() {
    21     char c = getchar();
    22     while(!isalpha(c)) c = getchar();
    23     return c;
    24 }
    25 
    26 bool dfs(int x, int y, int d, int cnt) {
    27     if (g[x][y] != str[cnt]) return false;
    28     if (cnt == 7) {
    29         while (cnt--) {
    30             v[x][y] = true;
    31             x -= dir[d][0]; y -= dir[d][1];
    32         }
    33         return true;
    34     }
    35     int xx = x + dir[d][0], yy = y + dir[d][1];
    36     if (1 <= xx && xx <= n && 1 <= yy && yy <= n) 
    37         if (dfs(xx, yy, d, cnt + 1)) return true;
    38 }
    39 
    40 int main() {
    41     // freopen("p1101.in", "r", stdin);
    42     scanf("%d", &n);
    43     for (int i = 1; i <= n; i++)
    44         for (int j = 1; j <= n; j++)
    45             g[i][j] = read();
    46     for (int i = 1; i <= n; i++)
    47         for (int j = 1; j <= n; j++) 
    48             for (int k = 0; k < 8; k++)
    49                 dfs(i, j, k, 1);
    50     for (int i = 1; i <= n; i++) {
    51         for (int j = 1; j <= n; j++) {
    52             if (v[i][j]) putchar(g[i][j]);
    53             else putchar('*');
    54         }
    55         putchar('
    ');
    56     }
    57     return 0;
    58 }

    题面中的样例数据(与样例数据答案分离):

    8
    qyizhong
    gydthkjy
    nwidghji
    orbzsfgz
    hhgrhwth
    zzzzzozo
    iwdfrgng
    yyyygggg

    题面:


    Luogu P1101 单词方阵

    题目描述

    给一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:
    *******
    *******
    *******
    *******
    *******
    *******
    *******
    

    Post author 作者: Grey
    Copyright Notice 版权说明: Except where otherwise noted, all content of this blog is licensed under a CC BY-NC-SA 4.0 International license. 除非另有说明,本博客上的所有文章均受 知识共享署名 - 非商业性使用 - 相同方式共享 4.0 国际许可协议 保护。
  • 相关阅读:
    Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门
    开源精神就意味着免费吗?
    是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。
    springcloud(十五):Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway
    写年终总结到底有没有意义?
    培训班出来的怎么了?
    【重磅】Spring Boot 2.1.0 权威发布
    一线大厂逃离或为新常态,大龄程序员改如何选择?
    Elastic 今日在纽交所上市,股价最高暴涨122%。
    技术人如何搭建自己的技术博客
  • 原文地址:https://www.cnblogs.com/greyqz/p/7231371.html
Copyright © 2011-2022 走看看