| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Discuss所有数据都过了!还是WA!难道是输入输出处理有问题?本人用trie做,附代码,望大家指点啊!#include <stdio.h> #include <string.h> #define MAXSIZE 1024 struct Result { int i ; int j ; int direct ; } ; const int direction[8][2] = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}} ; char table[MAXSIZE][MAXSIZE] ; char word[MAXSIZE][MAXSIZE] ; Result result[MAXSIZE] ; int M, N ; struct TrieNode { bool isWord ; bool visited ; int id ; TrieNode* next[26] ; TrieNode () { isWord = visited = false ; id = -1 ; int i ; for (i = 0 ; i < 26 ; i++) next[i] = NULL ; } } ; void Insert (TrieNode *&root, char target[], int ID) { int i, len = strlen (target) ; TrieNode *current ; while (target[len - 1] == ' ') len-- ; if (root == NULL) root = new TrieNode () ; current = root ; for (i = 0 ; i < len ; i++) { if (current->next[target[i] - 'A'] == NULL) current->next[target[i] - 'A'] = new TrieNode () ; current = current->next[target[i] - 'A'] ; if (i == len - 1) { current->isWord = true ; current->id = ID ; } } } bool LegalPos (int i, int j) { return 0 <= i && i < M && 0 <= j && j < N ; } bool Search (TrieNode *current, int i, int j, int k, int &ID) { if (!LegalPos (i,j) || current->next[table[i][j] - 'A'] == NULL) return false ; current = current->next[table[i][j] - 'A'] ; if (current->isWord == true && current->visited == false) { ID = current->id ; current->visited = true ; return true ; } i += direction[k][0] ; j += direction[k][1] ; return Search (current, i, j, k, ID) ; } void Research (TrieNode * root, int i, int j, int k, int &ID) { if (Search (root, i, j ,k, ID)) { result[ID].i = i ; result[ID].j = j ; result[ID].direct = k ; Research (root, i, j, k, ID) ; } } int main () { memset (result, -1, sizeof (result)) ; int W, i, j, k, ID ; TrieNode *root = NULL ; scanf ("%d%d%d", &M, &N, &W) ; //getchar () ; fflush (stdin) ; for (i = 0 ; i < M ; i++) gets (table[i]) ; for (i = 0 ; i < W ; i++) { gets (word[i]) ; Insert (root, word[i], i) ; } for (i = 0 ; i < M ; i++) for (j = 0 ; j < N ; j++) for (k = 0 ; k < 8 ; k++) Research (root, i, j, k, ID) ; for (i = 0 ; i < W ; i++) printf ("%d %d %c\n", result[i].i, result[i].j, result[i].direct + 'A') ; return 0 ; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator