UVA 题目10010 - Where's Waldorf? (四)

2014-11-24 02:51:54 · 作者: · 浏览: 9
tartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//right - left
if(j - len + 1>= 0){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i][j-k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//up - down
if(i + len <= M){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i+k][j]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//down - up
if(i - len + 1 >= 0){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i-k][j]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//right - up
if(j + len <= N && i - len + 1 >= 0){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i-k][j+k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//right - down
if(j + len <= N && i + len <= M){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i+k][j+k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//left - up
if(j - len + 1 >= 0 && i - len + 1 >= 0){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i-k][j-k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
//left - down
if(j - len + 1 >= 0 && i + len <= M){
flag = 0;
for(k = 0;k < len;k++){
if(str[k] != Matrix[i-k][j+k]){
flag = 1;
break;
}
}
if(flag == 0){
if(StartR > i+1){
StartR = i+1;
StartC = j+1;
}
else if(StartR == i+1 && StartC > j+1){
StartR = i+1;
StartC = j+1;
}
}
}
}//for j
}//for i
return 0;
}

int main (){
int i,j,Case,k,M,N;
//freopen("C:\\Users\\XIAOSI\\Desktop\\acm.txt","r",stdin);
while(scanf("%d",&Case) != EOF){
while(Case--){
scanf("%d %d",&M,&N);
//输入字符矩阵
for(i = 0;i < M;i++){
scanf("%s",temp);
for(j = 0;j < N;j++){
Matrix[i][j] = temp[j];
//转换为小写
if(Matrix[i][j] >= 'A' && Matrix[i][j] <= 'Z'){
Matrix[i][j] = Matrix[i][j] - 'A' + 'a';
}
}
}
scanf("%d",&k);
//待匹配串
for(i = 0;i < k;i++){
scanf("%s",str);
int len = strlen(str);
//转换为小写
for(j = 0;j < len;j++){
if(str[j] >= 'A' && str[j] <= 'Z'){
str[j] = str[j] - 'A' + 'a';
}
}
//printf("%s",str);
Match(M,N,StartR,StartC);
printf("%d %d\n",StartR,StartC);
}
//每组测试之间有空行
if(Case){
printf("\n");
}
}
}
return 0;
}