UvaOJ 10010 Where's Waldorf?

Given a m by n grid of letters, ( ), and a list of words, find the location in the grid at which the word can be found. A word matches a straight, uninterrupted line of letters in the grid. A word can match the letters in the grid regardless of case (i.e. upper and lower case letters are to be treated as the same). The matching can be done in any of the eight directions either horizontally, vertically or diagonally through the grid.

Input

The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.

The input begins with a pair of integers, m followed by n in decimal notation on a single line. The next m lines contain n letters each; this is the grid of letters in which the words of the list must be found. The letters in the grid may be in upper or lower case. Following the grid of letters, another integer k appears on a line by itself ( ). The next k lines of input contain the list of words to search for, one word per line. These words may contain upper and lower case letters only (no spaces, hyphens or other non-alphabetic characters).

Output

For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.

For each word in the word list, a pair of integers representing the location of the corresponding word in the grid must be output. The integers must be separated by a single space. The first integer is the line in the grid where the first letter of the given word can be found (1 represents the topmost line in the grid, and m represents the bottommost line). The second integer is the column in the grid where the first letter of the given word can be found (1 represents the leftmost column in the grid, and n represents the rightmost column in the grid). If a word can be found more than once in the grid, then the location which is output should correspond to the uppermost occurence of the word (i.e. the occurence which places the first letter of the word closest to the top of the grid). If two or more words are uppermost, the output should correspond to the leftmost of these occurences. All words can be found at least once in the grid.

Sample Input

1

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

Sample Output

2 5
2 3
1 2
7 8

思路就是从八个方向搜,思路清晰点就很容易写出来,还有将输入的字符进行统一变大写或变小写。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stack>
#include<stdlib.h>
#include<map>
#include<vector>
#include<queue>
#include<set>
#include<ctype.h>
#define zuida 100000
using namespace std;
char zh[500][500];
int n,m;
int tx[]={0, 0,1,-1, 1,1,-1,-1};
int ty[]={1,-1,0, 0,-1,1, 1,-1};
char puanduan(int x,int y)
{
    if(x<=n&&x>0&&y<=m&&y>0)
        return zh[x][y];
    else return ‘0‘;
}
void dfs(char b[],int &x,int &y)
{
    int i,j,l,e;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    for(l=0;l<8;l++)
    {
        int find=0;
        for(e=0;e<strlen(b);e++)
        {
            if(puanduan(i+tx[l]*e,j+ty[l]*e)==b[e])
                find++;
                else break;
        }
        if(find==strlen(b))
        {
            x=i;
            y=j;
            return;
        }
    }
}
int main()
{
    int N;
    char b[100];
    cin>>N;
    while(N--)
    {
        cin>>n>>m;
        int i,j;
        char l;
        for(i=1;i<=n;i++)
            {
                getchar();
                for(j=1;j<=m;j++)
                    {
                        l=getchar();
                        zh[i][j]=toupper(l);
                    }
            }
        int M;
        cin>>M;
        while(M--)
        {
            cin>>b;
            for(i=0;i<strlen(b);i++)
            {
                b[i]=toupper(b[i]);
            }
            int x,y;
            dfs(b,x,y);
            cout<<x<<‘ ‘<<y<<endl;
        }
    }
    return 0;
}

  

UvaOJ 10010 Where's Waldorf?

原文地址:https://www.cnblogs.com/SparkPhoneix/p/8552077.html

时间: 2024-12-26 17:04:26

UvaOJ 10010 Where's Waldorf?的相关文章

UVA 之10010 - Where&#39;s Waldorf?

 Where's Waldorf?  Given a m by n grid of letters, ( ), and a list of words, find the location in the grid at which the word can be found. A word matches a straight, uninterrupted line of letters in the grid. A word can match the letters in the grid

uva 10010 - Where&#39;s Waldorf?

#include<iostream> #include<cctype> #include<algorithm> using namespace std; char a[55][55]; string s[22]; int T,m,n,k; int mx[] = {1, 1, 1, 0, 0, -1, -1, -1}; int my[] = {1, 0, -1, 1, -1, 1, 0, -1}; bool in(int x,int y){ return x>=1&

(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html “AOAPC I”是刘汝佳(大

计划,,留

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 一.<算法竞赛入门经典> 刘汝佳 (UVaOJ 351道题) 以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html "AOAPC I"

算法竞赛入门经典+挑战编程+USACO

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发.   一.UVaOJ http://uva.onlinejudge.org  西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ.   二.<算法竞赛入门经典> 刘汝佳  (UVaOJ  351道题)  以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html   "AO

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

ghost 还原系统时,遇到error 10010,提示can not open image file

昨天系统有点问题,在用Ghost还原系统时,一直提示10010错误,提示can not open image file 想着可能是备份文件的问题,从另一台电脑上重新拷过来一份,仍然不行,Ghost还是提示10010错误 后来,实在没办法,想着可能是路径问题,就把备份文件从F盘的子文件夹里拷到E盘根目录下,重新试了一下,可以了. 看来还真是路径的问题. ghost 还原系统时,遇到error 10010,提示can not open image file,布布扣,bubuko.com

UVAoj 348 - Optimal Array Multiplication Sequence

1 /* 2 题意:矩阵相乘的最少的步数 3 dp[i][j]=min(dp[i][j], dp[i][k]+dp[k+1][j]+num[i-1]*num[k]*num[j]); 4 表示的是第i个矩阵到第j个矩阵相乘的最少步数 5 sign[i][j]表示的是第i个矩阵到第j个矩阵相乘的最少步数是由第i个矩阵到第sign[i][j]个矩阵相乘最少步数 6 和第sign[i][j]+1个矩阵到第j个矩阵相乘最少步数的得到的最小值! 7 */ 8 #include<iostream> 9 #i