60求指导 三四测试超时
查看原帖
60求指导 三四测试超时
1435695
Mu_________楼主2024/8/28 21:43
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int n=0, m = 0;//终点位置
	int x = 0, y = 0;//马的位置
	int i = 0, j = 0;//此时卒的位置
	int lujin(int n, int m, int x, int y, int i, int j);//申明
	scanf("%d %d %d %d", &n,&m,&x,&y);
	if (((x == 0) & (y == 0)) || ((x == n) && (y == m)))
		printf("0");
	else
	{
		int zu=lujin(n, m, x, y, i, j);
		printf("%d", lujin(n, m, x, y, i, j));
	}
	



return 0;
}

int lujin(int n, int m, int x, int y, int i, int j)
{
	
	
		if ((i + 1 == n) && (j == m))
			return 1;

		if ((i == n) && (j + 1 == m))
			return 1;

		if ((i + 1 <= n) && (j <= m) && (((abs(i + 1 - x) + abs(j - y)) != 3) || ((i + 1 == x) && (abs(j - y) == 3)) || ((j == y) && (abs(i + 1 - x) == 3))) && (((i + 1) != x) || (j != y)))// 判断x方向的这一步有否有效                                          马控制的全范围,(n,m)表格也没事 反正卒走不到那些位置
		{

			if ((i <= n) && (j + 1 <= m) && (((abs(i - x) + abs(j + 1 - y)) != 3) || ((i == x) && (abs(j + 1 - y) == 3)) || ((j + 1 == y) && (abs(i - x) == 3))) && ((i != x) || ((j + 1) != y)))//判断y方向这一步是否有效

				
				return (lujin(n, m, x, y, i + 1, j) + lujin(n, m, x, y, i, j + 1));   //都有的话 有两种路劲
		
			else

				return(lujin(n, m, x, y, i + 1, j));   //就x方向这一步有效


		}

		else if ((i <= n) && (j + 1 <= m) && (((abs(i - x) + abs(j + 1 - y)) != 3) || ((i == x) && (abs(j + 1 - y) == 3)) || ((j + 1 == y) && (abs(i - x) == 3))) && ((i != x) || ((j + 1) != y)))//判断y方向这一步是否有效


			return(lujin(n, m, x, y, i, j + 1));

		else
			return 0;//x y 方向都无效 }



	
}
2024/8/28 21:43
加载中...