UVa 10010 - Where's Waldorf?

/* coder: ACboy date: 2010-2-24 result: AC description: UVa 10010 - Where's Waldorf? lesson: see the problem clear. 1 <= m, n <= 50; at first I consider the max of the m and n is 25. */ #include <iostream> #include <ctype.h> using namespace std; int n, m; // 保存整个字符表格。 char data[60][60]; // 保存最终查找到的位置。 int positionX; int positionY; // 八个查找方向。 int dx[] = {1, -1, 0, 0, -1, 1, 1, -1}; int dy[] = {1, -1, 1, -1, 0, 0, -1, 1}; // 判断是否可以取下一个字母。 int ifCanNext(int x, int y) { if (x >= 0 && x < m && y >= 0 && y < n) return 1; else return 0; } void findPosition(char input[]) { int i, j, k; int inputLen = strlen(input); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { for (k = 0; k < 8; k++) { char str[50]; str[0] = data[i][j]; int newx = i + dx[k]; int newy = j + dy[k]; int c = 1; while (ifCanNext(newx, newy)) { str[c++] = data[newx][newy]; newx += dx[k]; newy += dy[k]; if (c == inputLen) break; } str[c] = '/0'; if (strcmp(str, input) == 0) { positionX = i + 1; positionY = j + 1; return; } } } } return; } int main() { int i, j; int count; int t = 0; #ifndef ONLINE_JUDGE freopen("10010.txt", "r", stdin); #endif cin >> count; while (count--) { if (t != 0) cout << endl; t++; cin >> m >> n; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { cin >> data[i][j]; data[i][j] = tolower(data[i][j]); } } int k; cin >> k; for (i = 0; i < k; i++) { char str[50]; cin >> str; int len; len = strlen(str); for (j = 0; j < len; j++) { str[j] = tolower(str[j]); } findPosition(str); cout << positionX << " " << positionY << endl; } } return 0; }

你可能感兴趣的:(UVa 10010 - Where's Waldorf?)