uva10010 Where's Waldorf?

题目链接 :http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=96&page=show_problem&problem=951

题目大意:给定一个二维字符串数组,找出想要找到的单词

题目考点:字符串

解题思路:从原数组中找到第一个匹配字母,然后再从八个方向找

题目代码

View Code
  1 // File Name: uva10010.cpp
  2 // Author: darkdream
  3 // Created Time: 2013年01月25日 星期五 09时25分33秒
  4 
  5 #include<vector>
  6 #include<list>
  7 #include<map>
  8 #include<set>
  9 #include<deque>
 10 #include<stack>
 11 #include<bitset>
 12 #include<algorithm>
 13 #include<functional>
 14 #include<numeric>
 15 #include<utility>
 16 #include<sstream>
 17 #include<iostream>
 18 #include<iomanip>
 19 #include<cstdio>
 20 #include<cmath>
 21 #include<cstdlib>
 22 #include<cstring>
 23 #include<ctime>
 24 #include<ctype.h>
 25 
 26 using namespace std;
 27 char a[100][100];
 28 int m , k ;
 29 int find (char b[] , int h , int l )
 30 {
 31    int i , j ,  t =0 , s;
 32    if ( h+1 >= strlen(b) ) 
 33    {
 34       t = 1 ;
 35       i = h ; 
 36       j = l ;
 37       for (s = 1 ; s < strlen(b); s++ )
 38           if (b[s] == a[--i][j])
 39                t = t+1;
 40       if (t == strlen(b))
 41            return 1;
 42    }
 43    if (h+1 >= strlen(b) && l+1 >= strlen(b))
 44    {
 45    
 46       t = 1 ;
 47       i = h ; 
 48       j = l ;
 49       for (s = 1 ; s < strlen(b); s++ )
 50           if (b[s] == a[--i][--j])
 51                t = t+1;
 52       if (t == strlen(b))
 53            return 1;
 54    }
 55    if (l+1 >= strlen(b))
 56    {
 57     
 58       t = 1 ;
 59       i = h ; 
 60       j = l ;
 61       for (s = 1 ; s < strlen(b); s++ )
 62           if (b[s] == a[i][--j])
 63                t = t+1;
 64       if (t == strlen(b))
 65            return 1;
 66    }
 67    if (h +1 >= strlen(b) && k-l+1 >= strlen(b))
 68    {
 69    t = 1 ;
 70    i = h ; 
 71    j = l ;
 72    for (s = 1 ; s < strlen(b); s++ )
 73        if (b[s] == a[--i][++j])
 74             t = t+1;
 75    if (t == strlen(b))
 76         return 1;
 77    
 78    }
 79    if (k-l +1 >= strlen(b))
 80    {
 81    
 82       t = 1 ;
 83       i = h ; 
 84       j = l ;
 85       for (s = 1 ; s < strlen(b); s++ )
 86           if (b[s] == a[i][++j])
 87                t = t+1;
 88       if (t == strlen(b))
 89            return 1;
 90    }
 91   if (m-h+1 >=strlen(b))
 92   {
 93   
 94       t = 1 ;
 95       i = h ; 
 96       j = l ;
 97       for (s = 1 ; s < strlen(b); s++ )
 98           if (b[s] == a[++i][j])
 99                t = t+1;
100       if (t == strlen(b))
101            return 1;
102   }
103   if (m-h+1 >= strlen(b) &&  h+1 >= strlen(b))
104   {
105   
106       t = 1 ;
107       i = h ; 
108       j = l ;
109       for (s = 1 ; s < strlen(b); s++ )
110           if (b[s] == a[++i][--j])
111                t = t+1;
112       if (t == strlen(b))
113            return 1;
114   }
115   if (m-h+1 >=strlen(b) && k -l +1 >= strlen(b))
116   {
117   
118       t = 1 ;
119       i = h ; 
120       j = l ;
121       for (s = 1 ; s < strlen(b); s++ )
122           if (b[s] == a[++i][++j])
123                t = t+1;
124       if (t == strlen(b))
125            return 1;
126   }
127    return 0;
128    
129          
130 
131 }
132 
133 int main(){
134       char  b[100][100];
135       int n,i ;
136       scanf("%d",&n);
137       for (i = 1;i <= n;i++)
138       {  memset(a,0,sizeof(a));
139          memset(b,0,sizeof(b));
140         if(i != 1 )
141             printf("\n");
142       
143 
144         int  j , c, t , p , q  ;
145         scanf("%d %d",&m ,&k);
146         getchar();
147         for (j =0; j < m ; j++)
148         {    gets(a[j]);
149            for (t = 0 ;t < k ; t++)
150                a[j][t]  = toupper(a[j][t]);
151         }
152         scanf("%d",&c);
153         getchar();
154         for (j = 0 ; j < c ;j++)
155         {    gets(b[j]);
156             for (t = 0 ; t < strlen(b[j]); t++)
157                 b[j][t] = toupper(b[j][t]);
158          
159         }
160         for (j = 0 ; j < c ; j++)
161         {
162             for(t = 0 ;t < m ;t++)
163             {  for (p = 0 ; p < k ; p++)
164               {
165                 if (a[t][p] == b[j][0])
166                     if (find(b[j], t , p))
167                     {
168                         printf("%d %d\n",t+1, p+1);
169                         break;
170                     }
171               }
172               if(find(b[j],t,p))
173                   break;
174             }
175 
176         }
177    
178     
179         
180 
181       }
182 return 0;
183 }
原文地址:https://www.cnblogs.com/zyue/p/2876247.html