您的位置:首页 > 其它

回溯法解决马步问题

2012-09-10 22:50 176 查看




public void GetWay()
{
map[start.X, start.Y] = 1;
int I = start.X, J = start.Y, k = 0, U = 0, V = 0;
while (true)
{
k = 0;
Heaven:
if (k > 7)
{
if (s.isEmpty())
{
MessageBox.Show("无解");
return;
}
else
{
Node temp;
temp = s.Pop();
k = temp.k + 1;
I = temp.i;
J = temp.j;
goto Heaven;
}
}
else
{
U = I + meth[k].dx;
V = J + meth[k].dy;
if (U > cloumns || V > rows || U < 0 || V < 0)
{
k++;
goto Heaven;
}
else if (map[U, V] == 1)
{
k++;
goto Heaven;
}
else
{
if (U == end.X && V == end.Y)
{
Node n = new Node();
n.i = I;
n.j = J;
n.k = k;
s.Push(n);
map[I, J] = 1;
I = U;
J = V;
MessageBox.Show("得解");
break;
}
else
{
Node n = new Node();
n.i = I;
n.j = J;
n.k = k;
s.Push(n);
map[I, J] = 1;
I = U;
J = V;
k++;
}
}
}
}
}


以上是回溯法,s是栈,根据流程图可写出算法



此外我还想学习下怎么获得最短路径,希望前辈们可以指点一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: