本程序的目的数据结构是一个储存所有子集集合的一个结构体,包含子集中所有的状态,利用邻接表实现。
算法正如书上所说,子集构造算法如下:
假定所构造的子集族为C,即C= (T1, T2,,... TI),其中T1, T2,,... TI为状态K的子集。
(1)开始,令-closure(K0)为C中唯一成员,并且它是未被标记的。
(2)while (C中存在尚未被标记的子集T)do
{
标记T;
for 每个输入字母a do
{
U:= -closure(move(T,a));
if U不在C中 then
将U作为未标记的子集加在C中
}
}
输入文本格式样例:
A B C D E F G H I J K L M N O P Q R S T #
A a B
C * D
E a F
G d H
M a N
O d P
Q * M
Q * O
N * R
P * R
I * E
I * G
F * J
H * J
K * I
J * L
J * I
K * L
B * S
S * K
S * C
D * T
R * T
L * Q
1