写这道题写了好久,我好菜。。最后还是参考了别人的代码。用常量表真的可以简化代码。
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int posx;
int posy;
int dx[]={1,-1,0, 0,-1,1, 1,-1};
int dy[]={1,-1,1,-1, 0,0,-1, 1};
char word_list[51][51];
char word[51];
int m,n;
void compare()
{
int i,j,k;
int len=strlen(word);
int newi,newj;
int ok;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(word[0]==word_list[i][j])
{
ok=0;
for(k=0;k<8;k++)
{
int l=1;
char tem[51];
tem[0]=word_list[i][j];
newi=i+dx[k];
newj=j+dy[k];
while(newi>=0&&newi<=m&&newj>=0&&newj<=n)
{
tem[l++]=word_list[newi][newj];
if(l==len) break;
newi+=dx[k];
newj+=dy[k];
}
tem[l]='\0';
if(l==strlen(word)&&(strcmp(tem,word)==0))
{
posx=i;posy=j;
ok=1;
break;
}
}
if(ok==1) break;
}
}
if(ok==1)break;
}
}
int main()
{
int t,p=0;
scanf("%d",&t);
while(t--)
{
// if(p!=0) printf("\n");
// p++;
int i,j;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
cin>>word_list[i][j];
word_list[i][j]=toupper(word_list[i][j]);
}
int a;
cin>>a;
while(a--)
{
scanf("%s",word);
int len=strlen(word);
for(j=0;j<len;j++)
word[j]=toupper(word[j]);
compare();
printf("%d %d\n",posx+1,posy+1);
}
if(t!=0) printf("\n");
}
return 0;
}