7-17 跳马问题

7-17 跳马问题

马在中国象棋以日字形规则移动。

请编写一段程序,给定m×n大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。

输入格式:

输入四个整数,分别为棋盘的大小以及初始位置坐标m,n,x,y。(0≤x≤m-1,0≤y≤n-1, m <=10, n <=10)。

输出格式:

一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。

输入样例:

5 4 1 0

输出样例:

7

#include <iostream>

using namespace std;
int m,n,x,y,cnt;
int b[12][12];
int dx[8]={-2,-2,-1, 1, 2, 2, 1,-1};
int dy[8]={ 1,-1,-2,-2,-1, 1, 2, 2};

void f(int aa,int bb,int t){
    int xx,yy,p,q;
    if(t>m*n)
    {
        /*for(p=0;p<=m-1;p++)
        {
            for(q=0;q<=n-1;q++)
            {
                print("%3d",b[p][q]);
            }
            cout<<endl;
        }*/
        cnt++;
        //cout<<endl;
        //return ;
    }
    for(int i=0;i<=7;i++)
    {
        xx=aa+dx[i];
        yy=bb+dy[i];
        if(xx>=0&&xx<=m-1&&yy>=0&&yy<=n-1&&b[xx][yy]==0)
        {
            b[xx][yy]=t;
            f(xx,yy,t+1);
            b[xx][yy]=0;
        }
    }
}

int main(){
    cin>>m>>n>>x>>y;
    b[x][y]=1;
    f(x,y,2);
    cout<<cnt;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值