该板有 10 行和 10 列按钮,均为绿色。棋盘随机生成 9 个红色障碍物。我的问题是如何仅使用绿色按钮找到从入口到导出水平和垂直方向的路径(将绿色更改为白色)。每次当我按下“开始”按钮时,绿色按钮都会变为白色。程序一次只能找到一条路径。例如,第一条路径在 (2(10)-1) 上执行,然后当我再次点击 Go 按钮时,它将找到另一条路径。这将一直持续到所有绿色按钮变为白色为止。 btn 1 是入口,btn 100 是导出。我使用点击事件......?
for (int i = 1; i <= 99;)
{
string btn_name = "btn" + Convert.ToString(i+10);
var btn_now = this.Controls.Find(btn_name, true)[0];
btn_name = "btn" + Convert.ToString(i + 1);
var btn_next = this.Controls.Find(btn_name, true)[0];
var btn_below = btn_next;
if (i <= 10 || i == 20 || i == 30 || i == 40 || i == 50 || i == 60 || i == 70 || i == 80 || i == 90)
{
btn_name = "btn" + Convert.ToString(i);
btn_below = this.Controls.Find(btn_name, true)[0];
}
if(btn_next.BackColor == Color.GreenYellow) {
if (i <= 10 || i == 20 || i == 30 || i == 40 || i == 50 || i == 60 || i == 70 || i == 80 || i == 90)
i+= 1;
else
i++;
btn_now = btn_next;
}
else {
btn_now = btn_next;
i+=1;
}
btn_now.BackColor = Color.White;
}
最佳答案
100 个单元格不需要 A*。
我用的算法大致是这样的:
为“exit”单元格分配“距离”0,将其添加到“visited”列表 对于“已访问”中的每个单元格,将未访问的邻居添加到距离 + 1 的“已访问”列表中 重复直到找到单元格或没有找到新的单元格
此时我们有一个单元列表以及它们与导出的距离。如果我们没有找到入口点,则返回 null。
创建一个空列表“路径”,并添加条目单元格。然后,从入口单元格开始,寻找比当前单元格“距离”小 1 的邻居。将此单元格添加到我们的路径并重复直到找到导出。
然后我们有一条最短路径。 (要找到所有最短路径,请查找“距离”小于当前单元格 1 的所有邻居,然后复制当前路径或使用比列表更复杂的结构来存储路径)。
这个算法是在这个网页上用 javascript 实现的。
关于C# 查找不同按钮颜色之间的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890399/