您当前的位置: 首页 >  Java

梁同学与Android

暂无认证

  • 4浏览

    0关注

    618博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java 洛谷 P1002 过河卒讲解

梁同学与Android 发布时间:2019-09-04 10:36:28 ,浏览量:4

题目描述

棋盘上AA点有一个过河卒,需要走到目标BB点。卒行走的规则:可以向下、或者向右。同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。

棋盘用坐标表示,AA点(0, 0)(0,0)、BB点(n, m)(n,m)(nn, mm为不超过2020的整数),同样马的位置坐标是需要给出的。

现在要求你计算出卒从AA点能够到达BB点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

输入格式

一行四个数据,分别表示BB点坐标和马的坐标。

输出格式

一个数据,表示所有的路径条数。

输入样例

6 6 3 3

输出样例

6

说明/提示 结果可能很大!

代码实例:

import java.util.Scanner;

public class ThreeMaGuoHe {

	static int e = 0;
	static void fn(int x, int y, int a, int b, int m, int d) {
		System.out.println(x + " " + y);
		if (x == m - 2 && y == d - 1 || x == m - 1 && y == d - 2 || x == m + 1
				&& y == d - 2 || x == m + 2 && y == d - 1 || x == m + 2
				&& y == d - 1 || x == m + 2 && y == d + 1 || x == m + 1
				&& y == d + 2 || x == m - 1 && y == d + 2 || x == m - 2
				&& y == d + 1 || x == m && d == y)
			return;
		if (x == a && y == b) {
			e++;
			return;
		}
		if (x + 1 > a) {
			fn(x, y + 1, a, b, m, d);
		} else if (y + 1 > b) {
			fn(x + 1, y, a, b, m, d);
		} else {
			fn(x + 1, y, a, b, m, d);
			fn(x, y + 1, a, b, m, d);
		}
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int a, b, m, d;
		a = in.nextInt();
		b = in.nextInt();
		m = in.nextInt();
		d = in.nextInt();
		// 起点为(0,0),a=6 b=6 m=3 d=3
		fn(0, 0, a, b, m, d);
		System.out.println(e);
		in.close();
	}
}

注,测试结果可能超时,但部分小数可以测试通过,测试通过分数60分,待解决。。。。

关注
打赏
1660730345
查看更多评论
立即登录/注册

微信扫码登录

0.1222s