zoukankan      html  css  js  c++  java
  • 跳马问题

    【问题描述】
    有一只中国象棋中的“ 马” ,在半张棋盘的左上角出发,向右下角跳去。
    规定只许向右跳(可上,可下, 但不允许向左跳)。请编程求从起点A(1,1)到终点B(m,n) 共有多少种不同跳法。

    【输入格式】
    输入文件只有一行,两个整数m 和n(1≤m,n≤20),两个数之间有一个空格。


    【输出格式】
    输出文件只有一个整数,即从A 到B 全部的走法。


    【输入输出样例】
    输入文件(horse.in)
    5 9
    输出文件(horse.out)
    37

     

     

    经典的 dfs 板子题,不做解释。

     

    ***然后我被坑了:我以为棋盘大小就是一般的象棋棋盘那么大,然后数组也就开了那么大,GG了……………………

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<iostream>
     6 using namespace std;
     7 typedef long long ll;
     8 #define rep(i, a, n) for(int i = a; i <= n; ++i)
     9 #define per(i, n, a) for(int i = n; i >= a; --i)
    10 int m, n, tot = 0;
    11 int dx[10] = {0, -2, -1, 1, 2}, dy[10] = {0, 1, 2, 2, 1};
    12 bool a[25][25];
    13 void dfs(int x, int y) 
    14 {
    15     if(x == m && y == n) {tot++; return;}
    16     rep(i, 1, 4) 
    17     {
    18         int newx = x + dx[i], newy = y + dy[i];
    19         if(newx > 0 && newx <= m && newy > 0 && newy <= n && !a[newx][newy]) 
    20         {
    21             a[newx][newy] = 1;
    22             dfs(newx, newy);
    23             a[newx][newy] = 0;
    24         }
    25     }
    26 }
    27 int main() 
    28 {
    29   freopen("horse.in", "r", stdin);
    30   freopen("horse.out", "w", stdout);
    31     scanf("%d%d", &m, &n);
    32     dfs(1, 1);
    33     printf("%d
    ", tot);
    34     return 0;
    35 }
  • 相关阅读:
    vue2 在methods 中无法获取this对象
    mysql-set
    laravel 模板
    laravel save() 返回 null
    如何设置电脑允许远程访问并修改电脑用户密码?
    laravel报错:Unable to detect application namespace.
    b站操作系统2程序的顺序执行与并发执行
    b站计算机网络谢希仁4物理层
    b站计算机网络谢希仁2性能
    b站J数据库13之封装通用的增删改查方法
  • 原文地址:https://www.cnblogs.com/mrclr/p/8665960.html
Copyright © 2011-2022 走看看