• 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;
    }


  • 相关阅读:
    git 忽略文件夹权限
    文字特效-shine.js-阴影随动
    微信小程序scroll-view中的坑(因为动态设置高度导致无法下拉)
    gitlab 403 forbidden 报错解决
    Vue子组件调用父组件的方法
    github的小笔记
    windows win10 重装系统 提示不是gpt分区不能安装
    使用html5播放m3u8直播源
    youtube-dl 使用简介
    ABAP RSA 加密
  • 原文地址:https://www.cnblogs.com/exlsunshine/p/3775108.html
Copyright © 2020-2023  润新知