回溯法解决马步问题

   

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是栈,根据流程图可写出算法

此外我还想学习下怎么获得最短路径,希望前辈们可以指点一下。     

你可能感兴趣的:(问题)