- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
nfa-dfa(NFA DFA)
nfa-dfa(NFA DFA)
#包括文件
#包含iostream
#包括记忆
#算法包括
#包括字符串
#包括 cmath
#包括向量
#包括设置
使用名称空间;
/ *
从NFA - DFA
步骤:
1。将所有还未计算的集合计算完(初始时,讲开始点的所在集合设为未计算集合)
2。对于每个未计算的集合计算每条边(A,B),如果产生一个新的完全不同的集,就把他加入集合中。
3。如何计算一个新产生的集呢?按照E边扩展。
!!子集构造法按照书的P26,用栈来实现,队列其实也行,深搜也行
e-closure(E的闭包)计算按书上方法栈,floodfill方法也行
* /
typedef int集 四;
typedef int向量 VI;
typedef对硅:迭代器,布尔 PI;
常量= 10000;
六克的[ ] [ 300 ];//克[我] [ J ]表示对于点我经过符号J到达的点,有向
int n = 0,M = 0;//点数,边的种类数
国际e_edge = 1;//记录E边的编号
字符边缘[ 300 ];//每个边的编号对应的字符
在原始的[ ];//对应的原编号
int v [ 300 ];//存某个字符是否用过,用过的话,就是它对应的标记号
int v2的[ ];//存某个数字是否用过,用过的话,就是它对应的标记号
起始;
六端;
/ /以下为保存DFA结果
INT [ 300 ];
四RSET的[ ];
int N2;/ / N2集合数;边的种类数应该保持不变,除了E边
int头= 0;//起始和结束集合
六end2;
无效debug_show_set(Si和S)
{
对于(硅:迭代器Si =美国begin();硅!= S();Si + +)
cout *四”;
}
无效inputing() /读入边,转化为矩阵
{
int,a,b,r;
ch;
memset(V,1,sizeof(V));
memset(V2,1,sizeof(V2));
cout “边的数目:”;CIN R;
对于(i = 0;i;r;i +)
{
;
如果(- 1)
{
原来的;
V2;
}
a [ V2 ];
如果(- 1)
{
原来的;
V2;
}
B = V2;
如果(- 1 =
{
边[ = ];
V=m + +;
}
如果(CH =“e”)
e_edge = V [CH];
CH=v [ CH ];
G [一] [(int)CH ] push_back(B);
}
cout “e_edge是“ e_edge endl;/ /调试
cout “起点”;CIN 开始;
启动=启动[开始];
cout “终点数目及各终点”;CIN 一;
对于(i = 0;i a;+ +)
{
CIN;
B = V2;
最后push_back(B);
}
}
四e_closure(Si和S)/求的的E的闭包栈方法
{
SI = s;
SI::迭代器SI;
int堆栈,顶部= 0;
memset(栈,0,sizeof(堆栈));
(四=为美国begin();硅!= S();Si + +)
{
堆栈[顶部+ +;
}
/开始堆栈
而(上)
{
顶;
int,j;
j =堆栈[顶];
PI P1;/对类型,第二个参数是bool
为(i = 0;i G [ J ] [ e_edge ]。size();i++)
{
P1 = r.insert(G [ J ] [ e_edge ] [我]);
如果(p1.second = =真)
{
栈[顶+ +] = G [ J ] [ e_edge ] [我];
}
}
}
返回R;
}
SI移动(SI和s),
Int j j the number of edges) / / step
{
SI r;
SI:: iterator, si;
For (Si = s.begin (); Si; =s.end (); si++)
For (int i=0 ig[*si J].size; []); (i++)
{
Int temp;
Temp = g[*si][j][i];
R.insert (temp);
}
Return r;
}
Bool contain_end (const SI S)
{
Int i;
For (i=0; iend.size (); i++)
If (s.find (end[, I,)) = s.end ()
Return 1;
Return 0;
}
Void, find_sub_set ()
{
Int, stack[N], top;
Memset (stack, 0, sizeof (stack));
Top = 0;
SI temp;
Temp.insert (start);
您可能关注的文档
- 100个管理条目(100 management entries).doc
- 10.买本必读选购时应避免的7误区(10., buy this should be avoided when reading 7 errors).doc
- 100个高频考点(100 high frequency test points).doc
- 100个脑筋急转弯(100 sharp corners).doc
- 100句相思诗词(100 lovesickness Poems).doc
- 10个贴士不让眼睛出卖年龄永远20岁(10 tips never let your eyes sell; age is 20).doc
- 10年元旦师生联谊晚会活动策划书(10 year new year's teachers and students party activities planning).doc
- 10种软件滤波方法及例程(10 software filtering methods and routines).doc
- 110神符之语(110 runeword).doc
- 11《河源志》(元)潘昻霄 撰(11, Heyuan annals (yuan), Pan Angxiao).doc
- ngo可持续发展的创新实践(NGO innovative practice of sustainable development).doc
- nie的生产工艺(Production process of Nie).doc
- oki 5530sc平推式票据打印机配置与校准指南(OKI 5530sc flat push bill printer configuration and calibration guide).doc
- op002客服部每日日程表(Op002 customer service daily schedule).doc
- ones刻录详解(Ones刻录详解).doc
- opengl部分函数详解(OpenGL partial function detailed).doc
- op指令表(OP instruction list).doc
- oracle 分区表的建立方法(Method for establishing Oracle partition table).doc
- nba2k11(nba2k11).doc
- oracle-绑定变量-详解(Oracle- bound variables - detailed).doc
原创力文档


文档评论(0)