您的位置:首页 > 其它

字符串-10010 Where’s Waldorf

2016-07-16 12:52 477 查看
题目大意:给定m*n的字母网格,给出需要找到的单词,按照八个方向分别查找,但是与普通的广搜或者深搜区别,方向始终保持一致,不弯曲,不交叉,找出最上最左的第一个字母位置

解题过程:一次AC,但是在调试过程中费了一点功夫,因为对scanf和printf还不熟,scanf按地址传递,printf直接打印

正确代码:

# include <cstdio>
# include <cstring>
# include <ctype.h>
# include <string>
# include <iostream>
//# define LOCAL
using namespace std;
char grid[60][60];
int dir[8][2]={{-1,-1},{-1,0},{-1,1,},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int main(){
# ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int a,n,m,k,j;
scanf("%d",&a);
//	printf("%d\n",a);
while(a){
a--;
scanf("%d%d",&m,&n);
//		printf("%d %d\n",m,n);
char temp[n+1];
for(int i=0;i<m;i++){
scanf("%s",temp);
for(int j=0;j<n;j++){
grid[i][j]=temp[j];
//				printf("%c",grid[i][j]);
}
//			printf("\n");
}
scanf("%d",&k);
//		printf("%d\n",k);
char (* word)[60]=new char[k][60];
for(int i=0;i<k;i++){
scanf("%s",word[i]);
//			printf("%s\n",word[i]);
}
int numofword=0;
while(numofword<k){
int len=strlen(word[numofword]);
int row=0,col=0;
int pos=0;
while(pos<len){
for(int i=0;i<8;i++){
if(row+dir[i][0]*(len-1)>=m||row+dir[i][0]*(len-1)<0||col+dir[i][1]*(len-1)>=n||col+dir[i][1]*(len-1)<0)
continue;
for(j=0;j<len;j++){
if(grid[row+dir[i][0]*j][col+dir[i][1]*j]==toupper(word[numofword][j])||grid[row+dir[i][0]*j][col+dir[i][1]*j]==tolower(word[numofword][j]))
continue;
break;
}
if(j==len){
pos=len;
break;
}
}
if(pos!=len){
row+=(col+1)/n;
col=(col+1)%n;
}
}
printf("%d %d\n",row+1,col+1);
numofword++;
}
if(a>0)	printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: