UVA 10010
#include <iostream> #include<cstdio> //#include <string.h> #include <cstring> using namespace std; char str[55][55]; int m,n; char bin[55]; int dir[8][2] = {-1,-1,-1,0,-1,1,0,-1,0,1,1,0,1,-1,1,1}; bool _strcmp (char *p,char *q) { int len = strlen (p); for (int i = 0; i < len; i++) if (p[i] != q[i] && (p[i] + 32) != q[i] && p[i] != (q[i] + 32)) return false; return true; } bool exbfs(int r,int c) { char aa[100]; int k = 0; int x = r,y = c; int len = strlen(bin); for (int i = 0; i < 8; i++) { k = 1; x = r,y = c; aa[0] = str[x][y]; while (k < len) { x += dir[i][0]; y += dir[i][1]; if (x >= 0 && x < m && y >= 0 && y < n) aa[k++] = str[x][y]; else break; } if (k != len) continue; aa[k] = '\0'; if (_strcmp (aa,bin)) return true; } return false; } int main () { int cas; scanf ("%d",&cas); printf("\n"); while (cas--) { scanf ("%d %d\n",&m,&n); for (int i = 0; i < m; i++) { gets(str[i]); } int tt ; scanf ("%d\n",&tt); for (int t = 0; t < tt; t++) { gets(bin); int row = 0,clum = 0; bool flay = false; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (str[i][j] == bin[0] || str[i][j] == (bin[0]+32) || (str[i][j]+32) == bin[0]) { row = i,clum = j; if (exbfs(i,j)) { flay = true; break; } } } if (flay) break; } printf ("%d %d\n",row+1,clum+1); } if (cas != 0) printf ("\n"); } return 0; }