我正在尝试使用BFS算法制作一个程序,因此我将每个节点放入一个队列中,并且一旦每个级别都在队列中,我就开始将它与另一个节点进行比较,以查看它们是否相等,然而,我遇到的问题是,我的队列中的元素正在被修改,所以当我做出队列时,我从来没有得到一个答案,我得到一个堆栈溢出。队列问题
我不知道我的代码中有什么部分出现问题,因为堆栈溢出发生在所有地方,但我会发布排队和排队的一部分。
所以是的,基本上在第二次循环后,它开始搞乱一切,它增加了超过1“b”到我的矩阵,它修改我的队列元素。
private void BFS(Nodo<string[,]> nodo)
{
Array.Copy(nodo.getEA(), datos5, 9);
temp = null;
temp2 = null;
temp3 = null;
temp4 = null;
Array.Copy(datos5, datos, 9);
//There are a bunch of if and else if so I just posted one
if (datos[1, 0].Equals("b"))
{
Array.Copy(datos, datos2, 9);
Array.Copy(datos, datos3, 9);
cont3=3;
//UP from 1,0 a 0,0
datos[1, 0] = datos[0, 0];
datos[0, 0] = "b";
temp = new Nodo<string[,]>(datos);
temp.setCamino("U");
temp.setPadre(nodo);
myq.Enqueue(temp);
temp = null;
//Right from 1,0 a 1,1
datos2[1, 0] = datos2[1, 1];
datos2[1, 1] = "b";
temp2 = new Nodo<string[,]>(datos2);
temp2.setCamino("R");
temp2.setPadre(nodo);
myq.Enqueue(temp2);
temp = null;
//Down from 1,0 a 2,0
datos3[1, 0] = datos3[2, 0];
datos3[2, 0] = "b";
temp3 = new Nodo<string[,]>(datos3);
temp3.setCamino("D");
temp3.setPadre(nodo);
myq.Enqueue(temp3);
fila();
}
}
private void fila()
{
Nodo<string[,]> temp5;
for (int i = 0; i < myq.Count; i++)
{
temp5 = null;
temp5 = (Nodo<string[,]>)myq.Dequeue();
if (objetivo(temp5, nodof))
{
if (!flag2)
{
boxResultado.AppendText("Problem solved");
flag2 = true;
break;
}
else
{
break;
}
}
else
{
if (!flag2)
{
BFS(temp5);
}
else
{
break;
}
}
}
}
private bool objetivo(Nodo<string[,]> p, Nodo<string[,]> e)
{
nodo1 = null;
nodo2 = null;
bool flag = false;
nodo1 = p.getEA();
nodo2 = e.getEA();
for (int i = 0; i < 3; i++)
{
for (int f = 0; f < 3; f++)
{
if (nodo1[i, f] != nodo2[i, f])
{
flag = true;
}
}
}
if (flag)
{
return false;
}
else
{
return true;
}
}
我知道我的代码是非常可怕的,但我一直在试图找出这个问题在过去的5个小时左右,所以我一直在这里修改和尝试有找到问题,但我感到非常沮丧,所以我决定在这里寻求帮助。 顺便说一下,这是在C#中
在此先感谢
非常感谢,我会尝试这个并发回。而我的“Nodo”类只是我制作的一个通用节点类。 – Jadager 2010-09-27 02:31:38