#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
using namespace std;
const int maxn=1001;
/*
NFA五元组
M={K,A,f,S,Z};
K::状态集合
A::字母表
F::转换函数
S::开始状态
Z::结束状态
*/
/*状态集合K中的结点*/
string node;
/*字母表A中的符号*/
string cas;
//NFA边数
int N;
/*转换函数f*/
struct f
{
string u,w,v;
//起点,条件,终点
};
struct change
{
string ta;
string arr[maxn];
};
void none(int a)
{
int i;
for(i=0; i<a; i++)
{
cout<<' ';
}
}
void Sort(string &a)
{
int i,j;
char b;
for(j=0; j<a.length(); j++)
for(i=0; i<a.length(); i++)
if(node.find(a[i])>node.find(a[i+1]))
{
b=a[i];
a[i]=a[i+1];
a[i+1]=b;
}
}
void eclouse(char c,string &he,f b[])
{
int k;
for(k=0; k<N; k++)
{
if(c==b[k].u[0])
if(b[k].w=="*")
{
if(he.find(b[k].v)>he.length())
he+=b[k].v;
eclouse(b[k].v[0],he,b);
}
}
}
void movex(change &he,int m,f b[])
{
int i,j,k,l;
k=he.ta.length();
l=he.arr[m].length();
for(i=0; i<k; i++)
for(j=0; j<N; j++)
if((cas[m]==b[j].w[0])&&(he.ta[i]==b[j].u[0]))
if(he.arr[m].find(b[j].v[0])>he.arr[m].length())
he.arr[m]+=b[j].v[0];
for(i=0; i<l; i++)
for(j=0; j<N; j++)
if((cas
NFA(子集算法,DFA最小化)代码实现
最新推荐文章于 2024-10-14 14:18:54 发布
该博客主要介绍了如何使用C++实现NFA(非确定有限状态自动机)的子集算法和DFA(确定有限状态自动机)的最小化过程。通过读取NFA的转换函数,构建并输出DFA的状态转移矩阵,最后完成DFA的最小化操作。
摘要由CSDN通过智能技术生成