1152. 简单的马周游问题

深搜,不怎么会用,不过渐渐有点懂了,看了网上的代码才做出来
#include<iostream>
#include<cstring>
using namespace std;
int q[31];
int xy[8][2] = {{-2,-1},{-1,-2},{1,-2},{2,-1},{2,1},{1,2},{-1,2},{-2,1}};
bool vis[6][7],f;
void dfs(int x, int y, int p)
{
if(f) return;
else if(p==30)
  {
   f = 1;
   for(int i = 0; i < 29; i++)
    cout << q[i] << " ";
   cout << q[29] << endl;
   return;
  }
 for(int i = 0; i < 8; i++)
   {
     if(f) break;
     int tx = x + xy[i][0], ty = y + xy[i][1];
     if(tx > 0 && tx < 6 && ty > 0 && ty < 7 && !vis[tx][ty])
     {
         q[p] = 6*tx + ty - 6;
         vis[tx][ty] = 1;
         dfs(tx,ty,p+1);
         vis[tx][ty] = 0;
     }
   }
}
int main()
{
  int n;
  while(cin >> n && n != -1)
  {
    memset(vis,0,sizeof(vis));
    memset(q,0,sizeof(q));
    f = 0,q[0] = n;
    int x = (n-1)/6+1, y = (n-1)%6+1;
    vis[x][y] = 1;
    dfs(x,y,1);
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值