编译原理 NFA_DFA代码实现 bfs+dfs+状态压缩 伪代码

博客分享了作者在编译原理课程中使用C++实现NFA_DFA转化的过程,包括状态压缩、bfs和dfs算法。作者强调了图像输出的困难,介绍了如何用C#处理输出的txt文件来绘制图形,并提到使用向量法处理箭头绘制。代码已上传至优快云。

这是上个月的作业了,由于当初发怕被抄袭,这个blog现在补上。

编译原理老师给我们布置了一个作业,要求用程序实现NFA_DFA的转化,并且要画图!画图!画图!日狗的事情说三遍!

对于我这个ACMer,输出表格的部分分分钟就编好了,bfs、dfs、状态压缩,程序高效无比,bug基本都清了。看看其他人还字符串比较爆搜的。。。这要是在比赛里不超时才怪!!!然后我们用了10%的时间和精力编了前半部分,用了90%的精力编写图像输出程序。。。

先给大家看看我们的前半部分是咋弄的,我用c++写的。想看代码?大哥打赏打赏use俩积分下载我上传的资源去>_<

http://download.youkuaiyun.com/detail/qdbszsj/9307911

这是伪代码,nb的人有伪代码基本就能敲出来了

1.初始化(init):

声明各种变量,开数组,并清空。

 

2.输入(input):

按照交互界面提示的格式,将nfa图输入。

 

3.运行核心算法程序(bfs宽度优先搜索):

 

声明一个队列q,q内存储int型数据,代表状态压缩后的一个集合;

放入起点0 通过dfs算法(深度优先搜索,具体实现见下文附录)得出的集合a;

在映射s中存入a,key值为a,权值为n++(n起始为1);

While(队列不为空){

      令f=队列的第一个元素;

      队列q.pop掉一个元素;

      统计的集合个数num_of_jihe++;

      for(i从0~图中权值的种类数){

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值