uva 10010 我的哪里错了呢。。。
2013-04-23 21:27
218 查看
#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; }
相关文章推荐
- uva 10010 我的哪里错了呢。。。
- UVA 10010 沃尔多夫在哪里
- UVa-10010-Where's Waldorf?
- uva 10010
- UVa 10010 - Where's Waldorf?
- UVA10010(八方向暴力枚举)
- UVa - 10010 - Where's Waldorf?
- uva 10010 Longest Match
- uva 10010(字符串)
- uva 10010(数学)
- uva-10010 - Where's Waldorf?
- UVA 10010 - Where's Waldorf? 题解
- UVa 10010 Where's Waldorf?
- UVa 10010: Where's Waldorf?
- UVA - 10010 Where's Waldorf?
- UVa 10010 - Where's Waldorf? 解题报告
- UVa 10010 沃尔多夫在那里
- UVA 10010
- UVA-10010的类似BFS做法
- uva 409 WA!!!哪里错了?