列表

详情


NC235814. 马踏棋盘

描述

nm列的棋盘上有一个中国象棋的马,马走日字且不能向左走,设原本坐标为(x,y),走一步可以达到的位置有(x+1,y+2) , (x+1,y-2) ,(x+2,y+1) ,(x+2,y-1),并且不能走出棋盘。请找到可行路径的条数,使得马从棋盘的左下角(1,1)走到右上角(n,m)

输入描述

一行,两个整数,表示棋盘的大小。

输出描述

输出一行一个整数,表示马从左下角到右上角的不同路径数。

示例1

输入:

4 5

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 436K, 提交时间: 2023-07-06 16:30:40

#include<bits/stdc++.h>

using namespace std;

int n,m,cnt=0;
int dx[5]={0,1,1,2,2},dy[5]={0,2,-2,1,-1};

void dfs(int x,int y)
{
	if(x==n&&y==m)
	{
		cnt++;
		return;
	}else if(x<1||x>n||y>m||y<1) return;
		
	
	for(int i=1;i<=4;i++)
	{
		dfs(x+dx[i],y+dy[i]);
	}	
	
	
}

int main()
{
	cin>>m>>n;
	dfs(1,1);
	cout<<cnt<<endl;
	return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 396K, 提交时间: 2023-02-14 15:43:48

#include<iostream>
using namespace std;
int n,m;
int f(int x,int y){
  int res=0;
  if(x<1||x>m||y<1||y>n) return 0;
  if(x==m&&y==n) return 1;
  res=res+f(x+1,y+2)+f(x+1,y-2)+f(x+2,y+1)+f(x+2,y-1);
  return res;
}
int main(){
  cin>>n>>m;
  cout<<f(1,1)<<endl;
  return 0;
}

上一题