AC自动机模板

来源:互联网 发布:windows旗舰版64位密钥 编辑:程序博客网 时间:2024/06/05 19:58

AC自动机是多模式匹配
其他和字典树用法差不多的
主要区别是在寻找多个时 将相同的子串建立关系 建立fail指针

void getfail()   //建立fail指针{    int i;    node *p;    p = root;    queue<struct node *>qu;    qu.push(p);    while (!qu.empty())    {        p = qu.front();        qu.pop();        for (i=0; i<26; i++)        {            if (p->child[i]!=NULL)            {                if (p==root)                {                    p->child[i]->fail = root;                }                else                {                    node * newnode= p->fail;                    while (newnode!=NULL)                    {                        if (newnode->child[i]!=NULL)                        {                            p->child[i]->fail = newnode->child[i];                            break;                        }                        newnode = newnode->fail;                    }                    if (newnode == NULL)                    {                        p->child[i]->fail = root;                    }                }                qu.push(p->child[i]);            }        }    }}
原创粉丝点击