电路板有10行10列按钮,全部为绿色。棋盘随机产生9个红色障碍物我的问题是如何找到路径(改变绿色到白色),从入口到出口水平和垂直使用绿色按钮。每当我按下Go按钮,绿色按钮将变为白色。程序只找到一个路径一次。例如,第一条路径在(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个细胞不需要*号。
我使用的算法大致如下:
指定“退出”单元格的“距离”为0,将其添加到“被访问”列表中
对于“已访问”中的每个单元格,将未访问的邻居添加到距离为+1的“已访问”列表中
重复此操作,直到找到单元格或找不到新单元格为止
在这一点上,我们有一个细胞列表和它们与出口的距离。如果找不到入口点,则返回null。
创建一个空列表“path”,并添加条目单元格。然后,从输入单元格开始,查找“距离”小于当前单元格1的邻居。将这个单元格添加到我们的路径中并重复直到找到退出。
然后我们有一条最短的路。(若要查找所有最短路径,请查找“距离”小于当前单元格的所有邻居,然后复制当前路径或使用比列表更复杂的结构存储路径)。
这个算法是用javascript在这个网页上实现的。
http://eastereggs.azurewebsites.net/eastereggs

关于c# - C#查找不同按钮颜色之间的路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39890399/

10-11 15:16
查看更多