2010年9月17日 星期五

ACM 10010 - Where's Waldorf?

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 51

char W[SIZE][SIZE];
char str[200];
int row, col, isFind, len;

void searchStr(int i, int j, int index, int id)
{
if (W[i][j] != str[index]) return;
if (isFind || index == len - 1) {isFind = 1; return;}
else
{
/* 左 */
if (j - 1 >= 0 && (!id || id == 1))
searchStr(i, j - 1, index + 1, 1);
/* 左上 */
if (j - 1 >= 0 && i - 1 >= 0 && (!id || id == 2))
searchStr(i - 1, j - 1, index + 1, 2);
/* 上 */
if (i - 1 >= 0 && (!id || id == 3))
searchStr(i - 1, j, index + 1, 3);
/* 右上 */
if (j + 1 < col && i - 1 >= 0 && (!id || id == 4))
searchStr(i - 1, j + 1, index + 1, 4);
/* 右 */
if (j + 1 < col && (!id || id == 5))
searchStr(i, j + 1, index + 1, 5);
/* 右下 */
if (j + 1 < col && i + 1 < row && (!id || id == 6))
searchStr(i + 1, j + 1, index + 1, 6);
/* 下 */
if (i + 1 < row && (!id || id == 7))
searchStr(i + 1, j, index + 1, 7);
/* 左下 */
if (j - 1 >= 0 && i + 1 < row && (!id || id == 8))
searchStr(i + 1, j - 1, index + 1, 8);
}
}

int main()
{
int n, i, j, k, s;
scanf("%d", &n);
while (n --)
{
scanf("%d %d", &row, &col);
getchar();
for (i = 0; i < row; i ++)
{
gets(W[i]);
for (j = 0; j < col; j ++)
W[i][j] = tolower(W[i][j]);
}

scanf("%d", &k);
getchar();
for (i = 0; i < k; i ++)
{
gets(str);
len = strlen(str);
for (j = 0; j < len; j ++)
str[j] = tolower(str[j]);
isFind = 0;
for (j = 0; j < row && !isFind; j ++)
for (s = 0; s < col && !isFind; s ++)
{
searchStr(j, s, 0, 0);
if (isFind) printf("%d %d\n", j + 1, s + 1);
}
}
if (n) printf("\n");
}
return 0;
}


回目錄
回首頁

沒有留言 :

張貼留言

Related Posts Plugin for WordPress, Blogger...