• 大小: 6KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-01-02
  • 语言: C/C++
  • 标签: DFA最小化  

资源简介

DFA最小化算法,即集合划分法。首先按照是否是接收状态将DFA状态划分成两个集合(当都是接受状态时划分成一个),然后根据状态转换指向集合分裂之。

资源截图

代码片段和文件信息

// @Fierralin
#include 
#include 
#include 
using namespace std;

ifstream inc(“dfa.txt“);
ofstream ouc(“dfa.dfa“);

struct DFA {
int m; // 状态数目
int sn; // 开始状态数目
int *s; // 开始状态集合
int an; // 接收状态数目
int *a; // 接受状态集合

int n; // 字母表的规模
char *t; // 字母表

int *c[1000]; // 状态转换函数

void set(int q1 int q2 int q3 int q4) { // 输入和存储DFA
int i j;
m = q1 n = q2 sn = q3 an = q4;
s = new int[sn];
for (i = 0; i < sn; i++) inc >> s[i]; // 输入开始状态集合
a = new int[an];
for (i = 0; i < an; i++) inc >> a[i]; // 输入接受状态集合
t = new char[n];
for (i = 0; i < n; i++) inc >> t[i]; // 输入字母表
for (i = 0; i < m; i++) c[i] = new int[n]; // 初始化转换表
for (i = 0; i < m; i++) for (j = 0; j < n; j++) inc >> c[i][j]; // 输入状态转换表
}
void r

评论

共有 条评论