UVA - 10010 Where's Waldorf?

来源:互联网 发布:犀牛软件分割模型 编辑:程序博客网 时间:2024/06/10 19:02

UVA - 10010 Where’s Waldorf?

写的很繁琐,代码很冗长。

题目大意:给一段字符串,作用类似棋盘,在这段字符串中找出给定字段最近的位置。

解题思路:暴力求,八个方向全写。先查首字母,找到相同的就查第二个字母在八个方向的哪个方向能对应,以此类推。

注意点:一开始没有考虑到所查找的字段只有一个字符的情况,这样,第二个字母就是’\0’,那么原先判断第二个字母是否相等时,只会找棋盘边界的位置了(’\0’对应’\0’)坑了很久很久。 QAQ

#include<iostream>#include<cstdio>#include<string.h>#include<ctype.h>using namespace std;int main() {   int h , m , n , k , col, li;   int i , j , g , l ;   char s[10000][60] , sk[50][1000];   bool flag;   cin >> h;   while( h--) {     cin >> m >> n;     for( i = 0 ; i < m ; i++) {       cin >> s[i];        for (j = 0; j < n ; j++ )           s[i][j] = tolower(s[i][j]);     }     cin >> k;     for( i = 0 ; i < k; i++){       cin >> sk[i];       for (j = 0; j < strlen(sk[i]) ; j++ )           sk[i][j] = tolower(sk[i][j]);     }     for( g = 0 ; g < k ; g++ ) {        l = 0 ;          for( i = 0; i < m; i++ ) {             for( j = 0; j < n ; j++) {               if( sk[g][l] == s[i][j] ) {                 li = i+1; col = j+1;flag = 0;              if( sk[g][l+1] == '\0') {flag = 1;goto one;}              else{                 if( sk[g][l+1] == s[i][j+1] ) {                   for( ; l < strlen(sk[g]) ;l++,j++) {                       if( sk[g][l] == s[i][j]) flag = 1;                       else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }               if(sk[g][l+1] == s[i][j-1] ) {                   for(; l < strlen(sk[g]) ;l++,j-- ) {                     if( sk[g][l] == s[i][j]) flag = 1;                      else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }                 i = li-1 ; j = col - 1;l=0;               if(sk[g][l+1] == s[i+1][j] ) {                   for(; l < strlen(sk[g]) ;l++,i++ ) {                     if( sk[g][l] == s[i][j]) flag = 1;                      else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }                 i = li-1 ; j = col - 1;l=0;               if(sk[g][l+1] == s[i-1][j] ) {                   for(; l < strlen(sk[g]) ;l++, i--) {                     if( sk[g][l] == s[i][j]) flag = 1;                     else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }               if(sk[g][l+1] == s[i+1][j+1] ) {                   for(; l < strlen(sk[g]) ;l++, j++, i++) {                      if( sk[g][l] == s[i][j]) flag = 1;                     else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }                 i = li-1 ; j = col - 1;l=0;               if(sk[g][l+1] == s[i+1][j-1] ) {                   for(; l < strlen(sk[g]) ;l++, i++, j--) {                     if( sk[g][l] == s[i][j]) flag = 1;                        else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }                 i = li-1 ; j = col - 1;l=0;               if(sk[g][l+1] == s[i-1][j+1] ) {                   for(; l < strlen(sk[g]) ;l++, i-- ,j++ ) {                     if( sk[g][l] == s[i][j]) flag = 1;                       else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                   }                  if ( flag == 1 ) break;                 }               if(sk[g][l+1] == s[i-1][j-1] ) {                   for(; l < strlen(sk[g]) ;l++, i--,j--) {                     if( sk[g][l] == s[i][j]) flag = 1;                      else { flag = 0;i = li-1 ; j = col - 1;l=0;break; }                  }                if(flag == 1) break;                 }                }               }             if(!flag) continue;           }         }         one:          if(flag)  cout << li << " " << col<<endl;          if(h&&!(k-g-1)) cout << endl;       }    //cout<<"lll"<<endl;    }  return 0;}
0 0
原创粉丝点击