搜索数据强一点就过不了了
//============================================================================
// Name : hello.cpp
// Author : key
// Version : 8
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
#define NUM_INF 0x7FFFFFFF
int n;
int dir[8][2] = {{-1,-1},{0,-1},{1,-1},{1,0},{1,1},{0,1},{-1,1},{-1,0}};
char map[110][110];
char str[110];
int len;
bool dfs(int i,int j,int p,int dirs)
{
if(i<0||j<0||i>n-1||j>n-1)
return false;
if(map[i][j] != str[p])
return false;
if(p==len-1)
return true;
return dfs(i+dir[dirs][0],j+dir[dirs][1],p+1,dirs);
}
int main()
{
int i,j,k;
int flat;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%s",&map[i]);
}
while(scanf("%s",str)!=EOF)
{
len = strlen(str);
flat = 0;
if(str[0] == '0' && !str[1])
break;
for(i=0;i<n;i++)
{
if(flat) break;
for(j=0;j<n;j++)
{
if(flat) break;
for(k=0;k<8;k++)
{
if(flat) break;
if(dfs(i,j,0,k))
{
flat = 1;
}
if(flat) break;
}
if(flat) break;
}
if(flat) break;
}
i++;
j++;
// printf("%d %d\n",i,j);
// printf("%d\n",k);
int ii = i+(len-1)*dir[k][0];
int jj = j+(len-1)*dir[k][1];
// printf("%d %d\n",ii,jj);
if(flat)
printf("%d,%d %d,%d\n",i,j,ii,jj);
else
printf("Not found\n");
}
}
return 0;
}