• [算法练习] UVA-10010-Where's Waldorf?


    UVA Online Judge 题目10010 Where's Waldorf?  Waldorf在哪?

    问题描述:

      给出一个m行n列的字符矩阵($1 leq m,n leq 20$),和一个单词列表,在矩阵上匹配每个单词。在矩阵上匹配单词包含八个方向(上、下、左、右、左上、左下、右上、右下),单词匹配成功后输出第一个字符的坐标。

    输入格式:

      第一行是一个整数,表示案例的个数。第二行是一个空行,每个案例的输入前都有一个空行。

      第三行是第一个案例的m和n,$1 leq m,n leq 20$,表示接下来的矩阵有m行n列。接下来m行是矩阵的数据。

      矩阵数据输入完之后是一个整数,表示该次案例需要匹配的单词个数k($1 leq k leq 20$),接下来k行既是k个单词。

    输出格式:

      针对每一个需要搜索的单词匹配成功后输出首字母的坐标,同一列有多个位置匹配成功则输出最靠上方的,同一行有多个位置匹配成功的则输出最靠左的一个(也就是说:我们只需要按列循环匹配,列内从小到大匹配即可)。

          注意:每个例子中间需要间隔一行,最后一个例子后面没有空行。

    示例输入:

    1
    
    8 11
    abcDEFGhigg
    hEbkWalDork
    FtyAwaldORm
    FtsimrLqsrc
    byoArBeDeyv
    Klcbqwikomk
    strEBGadhrb
    yUiqlxcnBjf
    4
    Waldorf
    Bambi
    Betty
    Dagbert

    示例输出:

    2 5
    2 3
    1 2
    7 8

    代码:(局部变量覆盖上一层变量WA了一次。。)

     1 /*
     2     Problem : UVA Online Judge - 10010 Where's Waldorf?
     3     Date:2014-04-03
     4     Author:Leroy
     5 */
     6 
     7 #include <stdio.h>
     8 #include <string.h>
     9 #include <ctype.h>
    10 
    11 char grid[51][51];
    12 
    13 void findWord(int m, int n, char* str)
    14 {
    15     int len = strlen(str);
    16     int x, y;
    17 
    18     for (x = 0; x < m; x++)
    19     {
    20         for (y = 0; y < n; y++)
    21         {
    22             if (grid[x][y] == str[0])
    23             {
    24                 for (int ix = -1; ix <= 1; ix++)
    25                 {
    26                     for (int iy = -1; iy <= 1; iy++)
    27                     {
    28                         if (!(ix == 0 && iy == 0))
    29                         {
    30                             int c = 1;
    31                             for (; c < len; c++)
    32                             {
    33                                 int cx = x + ix*c;
    34                                 int cy = y + iy*c;
    35                                 if (cx<0 || cy<0 || cx>(m-1) || cy>(n-1))
    36                                     break;
    37                                 if (grid[cx][cy] != str[c])
    38                                     break;
    39                             }
    40                             if (c == len)
    41                             {
    42                                 printf("%d %d
    ", x+1, y+1);
    43                                 return;
    44                             }
    45                         }
    46                     }
    47                 }
    48             }
    49         }
    50     }
    51 
    52 }
    53 
    54 int main(){
    55     int num;
    56     scanf("%d", &num);
    57     
    58     for (int i = 0; i < num; i++)
    59     {
    60         int m, n;
    61         scanf("%d %d", &m, &n);
    62         for (int j = 0; j < m; j++)
    63         {
    64             scanf("%s", grid[j]);
    65             for (int k = 0; k < n; k++)
    66             {
    67                 grid[j][k] = toupper(grid[j][k]);
    68             }
    69         }
    70 
    71         int wn;
    72         char word[51];
    73         scanf("%d", &wn);
    74         for (int j = 0; j < wn; j++)
    75         {
    76             scanf("%s", word);
    77             int k = 0;
    78             while (word[k] != '')
    79             {
    80                 word[k] = toupper(word[k]);
    81                 k++;
    82             }
    83             findWord(m, n, word);
    84         }
    85 
    86         if (i != num - 1)
    87             printf("
    ");
    88     }
    89 
    90     return 0;
    91 }
  • 相关阅读:
    小程序首页不显示tabbar
    小程序之背景音乐——wx.backgroundAudioManager
    根据浏览器分辨率自动调整网页宽度的一个例子
    vue 限制input[type=number]的输入位数策略整理
    php刷新当前页面
    PHP中获取当前页面的完整URL
    如何使用php session
    常用网页播放器代码
    php session 生命周期代码实例
    去掉删除discuz x3.2 的-Powered by Discuz!
  • 原文地址:https://www.cnblogs.com/Leroy1245/p/Uva_Problem_10010.html
Copyright © 2020-2023  润新知