这是上个月的作业了,由于当初发怕被抄袭,这个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~图中权值的种类数){

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

被折叠的 条评论
为什么被折叠?



