有限自动机的应用
#include<stdio.h>
#define START 0
#define GET1 1
#define GET0 2
#define END 3
int main(void)
{
char signal;
int vehicles, seconds, interval, longest;
int state;
state = START;
vehicles = 0;
seconds = 0;
longest = 0;
printf("input signals,'#'to end:\n");
while (state != END)
{
signal = getchar();
switch (state)
{
case START:
switch (signal)
{
case '1':
vehicles++;
state = GET1;
break;
case '0':
seconds++;
state = GET0;
break;
case '#':
state = END;
break;
}
break;
case GET1:
switch (signal)
{
case '1':
vehicles++;
break;
case '0':
seconds++;
interval = 1;
state = GET0;
break;
case '#':
state = END;
break;
}
break;
case GET0:
switch (signal)
{
case '0':
seconds++;
if (interval > 0) interval++;
break;
case '1':
vehicles++;
if (interval > longest)
longest = interval;
interval = 0;
state = GET1;
break;
case '#':
state = END;
break;
}
break;
}
}
printf("%d vehicles passed in %d seconds\n", vehicles, seconds);
printf("the longest gap was %d seconds\n", longest);
return 0;
}