VS使用C#语言现在需要补充代码private void button7_Clickobject sender EventArgs e使用子集构造算法实现NFA到DFA的转变private void button3_Clickobject sender EventArgs e OpenFileDialog openFileDialog1 = new OpenF
使用子集构造算法实现NFA到DFA的转变的代码实现如下:
private void button7_Click(object sender, EventArgs e)
{
// 子集构造算法
Dictionary<string, HashSet
while (unmarkedStates.Count > 0)
{
HashSet<string> currentSet = unmarkedStates.Dequeue();
foreach (string symbol in symbolList)
{
HashSet<string> nextSet = new HashSet<string>();
foreach (string state in currentSet)
{
foreach (ListViewItem item in listView1.Items)
{
if (item.SubItems[0].Text == state && item.SubItems[1].Text == symbol)
{
nextSet.Add(item.SubItems[2].Text);
}
}
}
if (nextSet.Count > 0 && !dfaStates.ContainsKey("{" + string.Join(",", nextSet) + "}"))
{
dfaStates["{" + string.Join(",", nextSet) + "}"] = nextSet;
unmarkedStates.Enqueue(nextSet);
}
}
}
// 将DFA状态添加到listView2中
listView2.Items.Clear();
string[] dfaStateArray = dfaStates.Keys.ToArray();
Array.Sort(dfaStateArray);
foreach (string dfaState in dfaStateArray)
{
HashSet<string> nfaStates = dfaStates[dfaState];
ListViewItem item = new ListViewItem(new[] { dfaState, "", "" });
foreach (string nfaState in nfaStates)
{
if (endSymbol.Contains(nfaState))
{
item.SubItems[2].Text = "Y";
}
}
listView2.Items.Add(item);
}
// 更新按钮状态
button7.Enabled = false;
button8.Enabled = true;
原文地址: https://www.cveoy.top/t/topic/cZzq 著作权归作者所有。请勿转载和采集!