資源簡介
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?>?s[i];?//?輸入開始狀態集合
a?=?new?int[an];
for?(i?=?0;?i?>?a[i];?//?輸入接受狀態集合
t?=?new?char[n];
for?(i?=?0;?i?>?t[i];?//?輸入字母表
for?(i?=?0;?i? for?(i?=?0;?i?>?c[i][j];?//?輸入狀態轉換表
}
void?r
- 上一篇:無向圖的強連通分量.cpp
- 下一篇:單片機c語言電子鐘程序含鬧鐘、萬年歷
評論
共有 條評論