Uva 10010

这道题是要找到字符串在字符矩阵里的位置,并输出其头字母的坐标。我们先找到首字母的位置,

然后按照八个方向当中的一个搜索,如果能找到完整的字符串,就输出坐标。与DFS每个点按照

八个方向搜索不同的是,这里只是按照一个方向一个方向地搜索。所以搜索函数也稍有不同。

#include<stdio.h>
#include<string.h>
#include <ctype.h>
const int maxn=60,dx[]= {1,1,1,0,-1,-1,-1,0},dy[]= {-1,0,1,1,1,0,-1,-1};

char G[maxn][maxn];
char str[maxn];
int main()
{
int t,n,m,i,j,x,y,count,K,len,k,a=0;
char ch;
bool flag;
scanf("%d",&t);
while(t--)
{
if(a!=0)
printf("\n");
a++;
scanf("%d%d",&n,&m);

for(i=1;i<=n;i++)
{
getchar();
for(j=1;j<=m;j++)
{
scanf("%c",&ch);
G[i][j]=tolower(ch);
}

}

/*
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
printf("%c",G[i][j]);
printf("\n");

}
*/
scanf("%d",&K);
getchar();

while(K--)
{
scanf("%s",&str);

//printf("%s\n",str);
len=strlen(str);
for(i=0;i<len;i++)
str[i]=tolower(str[i]);
flag=false;
for(i=1;i<=n && !flag;i++)
for(j=1;j<=m && !flag;j++)
for(k=0;k<8 && !flag;k++)
{
x=i;
y=j;
count=0;

while(x>=1 && x<=n && y>=1 && y<=m && count<len && str[count]==G[x][y])
{
++count;
x+=dx[k];
y+=dy[k];

}
if(count==len)
{
flag=true;
printf("%d %d\n",i,j);


}


}


}


}
return 0;
}

当你的才华还撑不起你的野心时,那你就应该静下心来学习。
原文地址:https://www.cnblogs.com/aceg/p/2513443.html