poj1204 字典树+DFS

来源:互联网 发布:mac版cad2014破解文件 编辑:程序博客网 时间:2024/04/28 07:29

#include<stdio.h>#include<string.h>const int N = 1008;const int CAP = 150;char stc[N][N];char word[N];int res[N][3];int dir[8][2]={0, -1, 1, -1, 1, 0, 1, 1, 0, 1, -1, 1, -1, 0, -1, -1};int root;int px, py;int l, c, w;struct Trie{    int next[CAP];    int id;    void init()    {        memset(next, -1, sizeof(next));        id = 0;    }};Trie node[N*100];int size;void myinsert(char* str, int id){    int len = strlen(str);    int i = 0, p = 0;    while(i < len)    {        if(node[p].next[str[i]] == -1)        {            node[p].next[str[i]] = size;            node[size++].init();        }        p = node[p].next[str[i]];        i++;    }    node[p].id = id;}void dfs(int cur, int x, int y, int d){    if(cur == -1) return;    int t = node[cur].id;    if(t > 0)    {        res[t][0] = px, res[t][1] = py, res[t][2] = d + 'A';    }    if(x < 0 || x >= l || y < 0 || y >= c) return;    dfs(node[cur].next[stc[x][y]], x + dir[d][1], y + dir[d][0], d);}//void init(){    root = 0;    node[0].init();    size = 1;}int main(){    while(~scanf("%d%d%d", &l, &c, &w))    {        init();        for(int i = 0; i < l; i++)            scanf("%s", stc[i]);        for(int i = 1; i <= w; i++)        {            scanf("%s", word);            myinsert(word, i);        }        for(int i = 0; i < l; i++)        {            for(int j = 0; j < c; j++)            {                for(int k = 0; k < 8; k++)                {                    px = i, py = j;                    dfs(0, i, j, k);                }            }        }        for(int i = 1; i <= w; i++)            printf("%d %d %c\n", res[i][0], res[i][1], res[i][2]);    }    return 0;}

当数组大小为 100 * 1008 * 256 会超 65535K 的内存

最多大概能开到 100 * 1008 * 150

0 0
原创粉丝点击