回溯法解决马步问题

   

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

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

转载于:https://www.cnblogs.com/HelloMyWorld/archive/2012/09/10/2679485.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值