UVA 10010 Where's Waldorf?

来源:互联网 发布:淘宝网运动女卫衣 编辑:程序博客网 时间:2024/05/16 08:34

题目大意:给定一个矩阵,里面是一些字母。要求找到指定字符串的位置,其中单词必须是一条直线(刚开始这里没看到 = =,英语是硬伤。)所以可以直接往八个方向搜索,不过这里只是往一个方向搜索(满足直线要求)。由于不区分大小写,搜索之前可以做个预处理,将小写字母全部转化成大写字母。


#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;char grid[55][55];char str[55];int m,n,l,flag,dir[8][2]={0,1,0,-1,1,0,-1,0,-1,-1,1,1,-1,1,1,-1};void dfs(int x,int y,int cnt,int how){//printf("%d %d\n",x,y); if(x<=0||y<=0||x>m||y>n)return ; if(cnt==l)flag=1; if(flag)return; int i; if(how==-1) {for(i=0;i<8;i++) { int fx=x+dir[i][0]; int fy=y+dir[i][1]; if(str[cnt]==grid[fx][fy])dfs(fx,fy,cnt+1,i); } } else { int fx=x+dir[how][0]; int fy=y+dir[how][1]; if(str[cnt]==grid[fx][fy])dfs(fx,fy,cnt+1,how); }}int main(){int T,i,j,k,q,w,e;scanf("%d",&T);while(T--){scanf("%d%d",&m,&n);for(i=1;i<=m;i++){for(j=1;j<=n;j++){cin>>grid[i][j];if(grid[i][j]>='a'&&grid[i][j]<='z')grid[i][j]=grid[i][j]-32;}}scanf("%d",&k);for(i=1;i<=k;i++){flag=0;scanf("%s",str);l=strlen(str);for(j=0;j<l;j++){if(str[j]>='a'&&str[j]<='z')str[j]=str[j]-32;}for(q=1;q<=m;q++){for(w=1;w<=n;w++){   if(grid[q][w]==str[0])dfs(q,w,1,-1);   if(flag)break;}if(flag)break;}printf("%d %d\n",q,w);}if(T!=0)printf("\n");}}



0 0