zoukankan      html  css  js  c++  java
  • 中国象棋 在从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);


    }
    }
  • 相关阅读:
    BOM
    no response from Graphic Screen Painter Exiting
    Windows Mobile 中模拟按键
    C# 获取汉字拼音首字母
    Web Service介绍
    .net/c#中栈和堆的区别及代码在栈和堆中的执行流程详解
    使用JSON加速AJAX(By Sean Kelly)
    Sql字符串操作函数
    一个简单AJAX注册示例
    .Net平台开发的技术规范与实践精华总结
  • 原文地址:https://www.cnblogs.com/zcg1051980588/p/13330228.html
Copyright © 2011-2022 走看看