UVA 10010 - Where's Waldorf?
2017-09-06 15:03
405 查看
题目大意:在字符串图里,找出名字的位置,名字可以往八个方向找。不区分大小写。
解题思路:方向数组来移动,先将所有字符串改为小写,输入名字也改为小写。在字符串图中查到名字首字符就进去函数,往八个方向尝试能否得到名字。
ac代码:
解题思路:方向数组来移动,先将所有字符串改为小写,输入名字也改为小写。在字符串图中查到名字首字符就进去函数,往八个方向尝试能否得到名字。
ac代码:
#include <iostream> #include <cstring> using namespace std; int dx[8]={-1,1,0,0,-1,-1,1,1}, dy[8]={0,0,-1,1,-1,1,-1,1}; int n, x, y, r, l, k, len; char puz[105][105], name[105], temp[105]; bool solve(int a, int b) { int t1, t2; for (int i=0; i<8; i++){ t1 = a, t2 = b; memset(temp, 0, sizeof(temp)); for (int j=0; j<len; j++){ temp[j] = puz[t1][t2]; t1 += dx[i], t2 += dy[i]; } if (!strcmp(temp, name)){ x = a + 1, y = b + 1; return 1; } } return 0; } int main() { scanf("%d", &n); while (n--){ scanf("%d%d", &r, &l); for (int i=0; i<r; i++){ scanf("%s", puz[i]); for (int j=0; j<l; j++) if (puz[i][j] >= 'a' && puz[i][j] <= 'z') puz[i][j] = 'A' + puz[i][j] - 'a'; } scanf("%d", &k); for (int i=0; i<k; i++){ scanf("%s", name); x = y = -1; len = strlen(name); for (int j=0; j<len; j++) if (name[j] >= 'a' && name[j] <= 'z') name[j] = 'A' + name[j] - 'a'; for (int i=0; i<r; i++){ for (int j=0; j<l; j++) if (puz[i][j] == name[0] && solve(i, j)) break; if (x != -1) break; } printf("%d %d\n", x, y); } if (n) printf("\n"); } return 0; }
相关文章推荐
- UVA 10010 (暑假-字符串(2) -A - Where's Waldorf?)
- UVA 10010 Where's Waldorf?
- uva10010 - Where's Waldorf?
- UVA - 10010 Where's Waldorf?
- UVa10010 Where's Waldorf?
- uva-10010 - Where's Waldorf?
- UVA 10010 Where's Waldorf? (DFS)
- UVA 10010 - Where's Waldorf? 水题一道
- UVA 10010-- Where's Waldorf?
- Uva - 10010 - Where's Waldorf?(暴力枚举)
- UVa 10010 - Where's Waldorf?
- UVA10010 - Where's Waldorf?
- UVa-10010-Where's Waldorf?
- uva 10010 Where's Waldorf?(DFS字符串查找)
- UVA10010 Where's Waldorf?
- UVa 10010: Where's Waldorf?
- UVA 10010 - Where's Waldorf?
- UVa - 10010 - Where's Waldorf?
- UVa 10010 - Where's Waldorf?
- UVa 10010 - Where's Waldorf? 解题报告