§例4.6 DFA M=({S,U,V,Q},{a,b},f, S, {Q})其中f定义为:
Ø
f(
S,a
)=
U
f(
V,a
)=
U
Ø
f(
S,b
)=
V
f(
V,b
)=
Q
Ø
f(
U,a
)=
Q
f(
Q,a
)=
Q
Ø
f(
U,b
)=
V
f(
Q,b
)=Q
DFA 的状态图
表示
编写一个DFA程序,用于
判断符号串
t
是否被
DFA
M
接受?
输入
输入∑*上的符号串t
输出
如果∑*上的符号串t能够被DFA M识别,输出accept
否则,输出not accept
样例输入
baab
样例输出
accept
#include <stdio.h>
//S为状态,t为输入字符
char Move(char S,char t){
char nextstatus;//下一状态
if(t=='a')//如果输入字符为a,即进行a转
{ if(S=='S') nextstatus='U';
if(S=='U') nextstatus='Q';
if(S=='V') nextstatus='U';
if(S=='Q') nextstatus='Q';
}else if(t=='b')//如果输入字符为a,即进行a转
{if(S=='S')nextstatus='V'; if(S=='U')nextstatus='V';
if(S=='V')nextstatus='Q'; if(S=='Q')nextstatus='Q';
}
return nextstatus;
}
int DFA(char *input)
{ char S = 'S';//初始状态
for(int i=0; input[i]!='\0'; i++)
S= Move(S, input[i]);
if(S=='Q') return 1;//Q为终止状态
else return 0;
}
int main()
{ char input[40];
scanf("%s",input);
if(DFA(input)) printf("accept\n");
else printf("not accept\n");
return 0;
}