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是栈,根据流程图可写出算法
此外我还想学习下怎么获得最短路径,希望前辈们可以指点一下。