10010

来源:互联网 发布:java并发编程实战 pdf 编辑:程序博客网 时间:2024/06/13 11:48
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <ctype.h>


using namespace std;
#define maxnsize 55
int n,m;
char gird[maxnsize][maxnsize];
int ansx, ansy;
bool check(char *s)
{
    int i,j,k,l;
    int len = strlen(s);
    int cnt  = 0;
    ansx = 0;
    ansy = 0;


    for( i = 0; i < n; i++)
    {
        for( j = 0; j< m; j++)
        {


            if(gird[i][j] == s[0])
            {
                ansx = i + 1;
                ansy = j + 1;
                cnt = 0;


                if(m  - j >= len)//same row ->
                {


                    for(  k = j, cnt = 0; k < j + len; k++)
                    {if(s[cnt] != gird[i][k])
                            break;
                            cnt++;
                    }
                    if(cnt == len)
                        return true;
                }


                if( j + 1 >= len)//same row <-
                {


                    for(  k = j,cnt = 0; k >= j + 1 - len; k--)
                     {
                         {if(s[cnt] != gird[i][k])
                            break;
                            cnt++;
                          }
                     }
                    if(cnt == len)
                        return true;


                }


                if( n - i >= len)//same c
                {


                    for(  k = i, cnt = 0; k < i + len; k++)
                       {
                          {if(s[cnt] != gird[k][j])
                            break;
                            cnt++;
                          }
                       }
                    if(cnt == len)
                        return true;
                }


                if(  i + 1 >= len)//same c
                {
                    for(  k = i,cnt = 0; k >= i + 1 - len; k--)
                       {
                           {if(s[cnt] != gird[k][j])
                            break;
                            cnt++;
                          }
                       }
                    if(cnt == len)
                        return true;


                }


                if(n - i >= len && m - j >= len)
                {
                    l = i, k = j;


                    for( cnt = 0; cnt < len; cnt++)
                    {
                        {if(s[cnt] != gird[l][k])
                            break;
                            l++,k++;
                          }


                    }
                    if(cnt == len)
                        return true;
                }


                if(i + 1 >= len &&  j + 1 >= len)
                {
                    for(  k = j,l = i, cnt = 0; cnt <len ; k--, l--)
                       {
                           if(s[cnt] != gird[l][k])
                            break;
                        cnt++;
                       }
                    if(cnt == len)
                        return true;


                }
                 if(n - i >= len &&  j + 1 >= len)
                {
                   l = i, k = j;
                    for( cnt = 0; cnt < len; cnt++)
                    {
                        if(s[cnt] != gird[l][k])
                            break;
                          l++,k--;
                    }
                    if(cnt == len)
                        return true;
                }


                  if(i + 1 >= len &&  m - j>= len)
                {
                   l = i, k = j;
                    for( cnt = 0; cnt < len; cnt++)
                    {
                        if(s[cnt] != gird[l][k])
                            break;
                            l--;
                            k++;


                    }
                    if(cnt == len)
                        return true;
                }
            }
        }
    }
    return false;
}


int main()
{
    int t, q;
    char que[maxnsize];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n, &m);


        for( int i = 0; i<n; i++)
            scanf("%s",gird[i]);
        for( int i = 0; i<n; i++)
         for( int j = 0; j<m; j++)
          gird[i][j] = tolower(gird[i][j]);
        scanf("%d",&q);


        while(q--)
        {
            scanf("%s",que);
            for( int i = 0; que[i] != '\0'; i++)
                que[i] = tolower(que[i]);
            if(check(que))
            {
                printf("%d %d\n",ansx, ansy);
            }
        }
      if(t)
         printf("\n");
    }
    return 0;
}
0 0
原创粉丝点击