题目链接 :http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=96&page=show_problem&problem=951
题目大意:给定一个二维字符串数组,找出想要找到的单词
题目考点:字符串
解题思路:从原数组中找到第一个匹配字母,然后再从八个方向找
题目代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }