uva 10010 我的哪里错了呢。。。

#include <stdio.h>
#include <string.h>

struct pos
{
	int x;
	int y;
};

pos result;
int times;
int m,n;
int wdNum;
char word[30][60];
char txt[60][60];

bool findWord(char *str,int len,int findOri)
{
	int i,j,k;
	if(1==findOri)//横向->
	{
		for(i=0;i<m;i++)//矩阵中m个单词
		{
			for(j=0;j<n-len+1;j++)//n 为矩阵中单词的长度
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[i][j+k])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=1+j;
					result.y=1+i;
					return true;
				}
			}
		}
	}
	if(2==findOri)//横向<-
	{
		for(i=0;i<m;i++)//矩阵中m个单词
		{
			for(j=n-1;j>=len-1;j--)//n 为矩阵中单词的长度,j小于待比对的单词长度就不用再查了,肯定不能匹配上了
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[i][j-k])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=1+j;
					result.y=1+i;
					return true;
				}
			}
		}
	}
	if(3==findOri)//向下,即先纵向搜索,再横向搜索
	{
		for(i=0;i<n;i++)//n为矩阵中单词的长度
		{
			for(j=0;j<m-len+1;j++)
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[j+k][i])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=1+i;
					result.y=1+j;
					return true;
				}
			}
		}
	}
	if(4==findOri)//向上,即先纵向搜索,再横向搜索
	{
		for(i=0;i<n;i++)//n为矩阵中单词的长度
		{
			for(j=m-1;j>=len-1;j--)
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[j-k][i])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=1+i;
					result.y=1+j;
					return true;
				}
			}
		}
	}
	if(5==findOri)//右上
	{
		for(i=len-1;i<m;i++)//从第len-1行开始向右上方递增
		{
			for(j=0;j<n-len+1;j++)//到第n-len+1列
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[i-k][j+k])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=(j+(k-1))+2-len;
					result.y=(i-(k-1))+len;
					return true;
				}
			}
		}
	}
	if(6==findOri)//右下
	{
		for(i=0;i<m-len+1;i++)//从第0行开始向右下方递增
		{
			for(j=0;j<n-len+1;j++)//到第n-len+1列
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[i+k][j+k])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=(j+(k-1))-len+2;
					result.y=(i+(k-1))-len+2;
					return true;
				}
			}
		}
	}
	if(7==findOri)//左上
	{
		for(i=len-1;i<m;i++)//从第len-1行开始向右上方递增
		{
			for(j=len-1;j<n;j++)//到第n-len+1列
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[i-k][j-k])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=(j-(k-1))+len;
					result.y=(i-(k-1))+len;
					return true;
				}
			}
		}
	}
	if(8==findOri)//左下
	{
		for(i=0;i<m-len+1;i++)//从第len-1行开始向右上方递增
		{
			for(j=len-1;j<n;j++)//到第n-len+1列
			{
				for(k=0;k<len;k++)
				{
					if(str[k]==txt[i+k][j-k])
						continue;
					else
						break;
				}
				if(k==len)
				{
					result.x=(j-(k-1))+len;
					result.y=(i+(k-1))-len+2;
					return true;
				}
			}
		}
	}

	return false;
}

int main()
{
	int i,j;

	scanf("%d",×);
	printf("\n");

	while(times--)
	{
		scanf("%d %d",&m,&n);
		for(i=0;i<m;i++)
			scanf("%s",txt[i]);
		for(i=0;i<m;i++)
		{
			for(j=0;j<n;j++)
				if('A'<=txt[i][j] && txt[i][j]<='Z')
					txt[i][j]=txt[i][j]+32;
		}
		
		scanf("%d",&wdNum);
		for(i=0;i<wdNum;i++)
			scanf("%s",word[i]);
		for(i=0;i<wdNum;i++)
		{
			j=0;
			while(word[i][j]!='\0')
			{
				if('A'<=word[i][j] && word[i][j]<='Z')
					word[i][j]=word[i][j]+32;
				j++;
			}
		}

		for(i=0;i<wdNum;i++)
		{
			if(findWord(word[i],strlen(word[i]),1))//横向->
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),2))//横向<-
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),3))//向下
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),4))//向上
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),5))//右上
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),6))//右下
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),7))//左上
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
			if(findWord(word[i],strlen(word[i]),8))//左下
			{
				printf("%d %d\n",result.y,result.x);
				continue;
			}
		}
		if((times-1)!=0)//最后一个回车不输出吧...
			printf("\n");
	}
	return 0;
}


原文地址:https://www.cnblogs.com/exlsunshine/p/3775108.html