zoukankan      html  css  js  c++  java
  • 回溯法解决马步问题

       

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

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

  • 相关阅读:
    专题三--1005
    专题三--1009
    专题三--1017
    背包九讲
    专题三--1003
    专题三--1004
    专题三--1015
    [洛谷P1220]关路灯
    [洛谷P1776]宝物筛选
    [USACO14JAN]Recording the Moolympics
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/2679485.html
Copyright © 2011-2022 走看看