真正热爱|

nasia

园龄:2年粉丝:3关注:16

马的遍历

在n*m(n表示行,m表示列)的棋盘上,马起始位置为x,y(注意:左上角第一个位置为1,1),问:马有多少种走的方法,将棋盘所有的位置全部走一遍,并且每个位置经过且仅经过一次。马跳“日”字。

输入

           第一行:n,m(中间空格隔开)(n,m<7)

   第二行:x,y(中间空格隔开)

输出

   可能的方法数

样例

样例输入1

5 4

1 1

样例输出1 

32

code:

复制代码
#include <bits/stdc++.h>
using namespace std;
int ans = 0,n,m,arr[7][7];
int xx[9] = {0,-2,-2,-1,1,2,2,-1,1};
int yy[9] = {0,-1,1,2,2,-1,1,-2,-2};
void q(int a,int b,int k){
    if(k == n*m){
        ++ans;
        return; 
    }
    for(int i = 1;i<=8;i++){
        int abx = a+xx[i];
        int aby = b+yy[i];
        if(!arr[abx][aby] && abx > 0 && aby > 0 && abx <= n && aby <= m){
            arr[abx][aby] = 1;
            q(abx,aby,k+1);
            arr[abx][aby] = 0;
        }
    }
    
}
int main(){
    int x,y;
    cin>>n>>m;
    cin>>x>>y;
    arr[x][y] = 1;
    q(x,y,1);
    cout<<ans;
    return 0;
}
复制代码

 

本文作者:nasia

本文链接:https://www.cnblogs.com/nasia/p/17229411.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   nasia  阅读(91)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示