久都没弄好,最后干脆放弃运行效率(虽然本来我那程序效率就不高),找到字符就各个方向都判断不进行筛选,最后,终于AC了!!!搞了好几天。。。
?
贴AC代码(略长,都是重复的):
#include ?
#include ?
#include ?
??
int i, j, l,cnt, n, m, k, rec_m, rec_n; ?
char letter[50][50], word[20][50], temp[50]; ?
??
int search(void); ?
int main() ?
{ ?
? ? scanf("%d", &cnt); ?
??
? ? while (cnt --) ?
? ? { ?
? ? ? ? scanf("%d%d", &m, &n); ?
? ? ? ? for (i = 0; i < m; i ++) ?
? ? ? ? { ?
? ? ? ? ? ? scanf("%s", letter[i]); ?
? ? ? ? ? ? for (j = 0; j < strlen(letter[i]); j ++) ?
? ? ? ? ? ? ? ? letter[i][j] = tolower(letter[i][j]); ?
? ? ? ? } ?
? ? ? ? scanf("%d", &k); ?
? ? ? ? for (i = 0; i < k; i ++) ?
? ? ? ? { ?
? ? ? ? ? ? scanf("%s", word[i]); ?
? ? ? ? ? ? for (j = 0; j < strlen(word[i]); j ++) ?
? ? ? ? ? ? ? ? word[i][j] = tolower(word[i][j]); ?
? ? ? ? } ?
? ? ? ? for (i = 0; i < k; i ++) ?
? ? ? ? { ?
? ? ? ? ? ? search(); ?
? ? ? ? ? ? printf("%d %d\n", rec_n + 1, rec_m + 1); ?
? ? ? ? } ?
? ? ? ? if (cnt != 0) ?
? ? ? ? ? ? printf(("\n")); ?
? ? } ?
? ? return 0; ?
} ?
??
int search(void) ?
{ ?
? ? int len = strlen(word[i]); ?
? ? for (j = 0; j < m; j ++) ?
? ? { ?
? ? ? ? for (l = 0; l < n; l ++) ?
? ? ? ? { ?
? ? ? ? ? ? if (word[i][0] == letter[j][l]) ?
? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? //ru ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j + p][l - p]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? //rd ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j + p][l + p]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? //r ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j + p][l]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? ? ? //lu ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j - p][l - p]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? //ld ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j - p][l + p]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? //l ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j - p][l]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? //u ?
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j][l - p]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? ? ? //d ?www.2cto.com
? ? ? ? ? ? ? ? memset(temp, 0, sizeof(temp)); ?
? ? ? ? ? ? ? ? for (int p = 0; p < len; p++) ?
? ? ? ? ? ? ? ? ? ? temp[p] = letter[j][l + p]; ?
? ? ? ? ? ? ? ? if (strcmp(temp, word[i]) == 0) ?
? ? ? ? ? ? ? ? { ?
? ? ? ? ? ? ? ? ? ? rec_n = j; ?
? ? ? ? ? ? ? ? ? ? rec_m = l; ?
? ? ? ? ? ? ? ? ? ? return 0; ?
? ? ? ? ? ? ? ? } ?
? ? ? ? ? ? } ?
? ? ? ? } ?
? ? } ?
? ? rec_m = rec_n = 0; ?
? ? return 0; ?
} ?