• 中国象棋 在从0,0 象棋马经过k步到达某一点的方法数量


    package com.trs.codetool.core;

    /**
    * 2020/07/20
    * 中国象棋 在从0,0 象棋马经过k步到达某一点的方法数量
    */
    public class KStepMa {
    public static void main(String[] args) {
    // x,y 代表终点位置 k代表总共k步
    int x = 2,y = 3,k = 3;
    // 递归的方式
    //int num = getWay1(x,y,k);
    // 动态规划的方式
    int num = getWay2(x,y,k);
    // 动态规划的方式
    System.out.println("调到指定方法数:"+ num);
    }

    /**
    * 动态规划的方式
    * @param x
    * @param y
    * @param k
    * @return
    */
    private static int getWay2(int x, int y, int k) {
    int[][][] dp = new int[10][9][k+1];
    dp[0][0][0] = 1;
    for(int level = 1;level<k+1;level++) {
    for(int i=0;i<10;i++) {
    for(int j = 0;j<9;j++) {
    if(x < 0 || y < 0 || x > 9 || y >8) {
    dp[i][j][level] = 0;
    continue;
    }
    else {
    dp[i][j][level] = getValue(dp,i+2,j-1,level-1)
    + getValue(dp,i+2,j+1,level-1)
    + getValue(dp,i+1,j+2,level-1)
    + getValue(dp,i-1,j+2,level-1)
    + getValue(dp,i-2,j+1,level-1)
    + getValue(dp,i-2,j-1,level-1)
    + getValue(dp,i-1,j-2,level-1)
    + getValue(dp,i+1,j-2,level-1);
    }
    }
    }
    }
    for(int i=0;i<10;i++) {
    for(int j=0;j<9;j++) {
    System.out.println("i:"+i+"j:"+j+ "result:"+ dp[i][j][k]);
    }
    }
    return dp[x][y][k];
    }
    public static int getValue(int[][][] dp,int x,int y,int z) {
    if(x < 0 || y < 0 || x > 9 || y >8) {
    return 0;
    }
    return dp[x][y][z];
    }
    /**
    * 递归的方式
    * @param x
    * @param y
    * @param k
    * @return
    */
    private static int getWay1(int x, int y, int k) {
    if(k == 0) {
    return (x == 0 && y == 0) ? 1 : 0;
    }
    if(x < 0 || y < 0 || x > 9 || y >8) {
    return 0;
    }
    return getWay1(x+2,y-1,k-1)
    + getWay1(x+2,y+1,k-1)
    + getWay1(x+1,y+2,k-1)
    + getWay1(x-1,y+2,k-1)
    + getWay1(x-2,y+1,k-1)
    + getWay1(x-2,y-1,k-1)
    + getWay1(x-1,y-2,k-1)
    + getWay1(x+1,y-2,k-1);


    }
    }
  • 相关阅读:
    iframe自适应高度的多种方法方法
    [tomcat][mysql][JDK][maven][myEclipse][ubuntu][centOs][oracle]等下载地址整理
    解决电脑速度越来越慢的方法
    li:hover 上再IE6下就没有效果的解决方法
    各种常用文件后缀名详解
    ASP.net中网站访问量统计方法
    RabbbitMQ的配置 以在.NetCore 的CAP 使用RabbbitMQ 实现订阅与发布问题
    .netCore 根据模型生成数据库
    jsonp Ajax跨域请求
    IE8 placeholder兼容+Password兼容
  • 原文地址:https://www.cnblogs.com/zcg1051980588/p/13330228.html
Copyright © 2020-2023  润新知