站外题求解
  • 板块灌水区
  • 楼主Like_Amao
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/4/13 15:48
  • 上次更新2024/4/13 17:27:37
查看原帖
站外题求解
993044
Like_Amao楼主2024/4/13 15:48
  1. 【搜索与回溯算法】马的走法

在 5X5 的棋盘上,给定一位置,输出马回到原点有多少种不同的方案。

注意:马走的每一步必须在棋盘上,走斜日

注意:棋盘的左上角坐标为 (1,1)。

      输入

给定一位置:x y,中间有一空格隔开。

      输出

输出可以回到原点的方案总数。

本蒟蒻采用深搜,目前未发现错误

#include<bits/stdc++.h>
using namespace std;
int n,m,total,bz,mp[6][6];
void dfs(int,int);
int main()
{
	cin>>n>>m;
	dfs(n,m);
	cout<<total;
}
void dfs(int x,int y)
{
	if(x==n and y==m and bz==1)
	{
		total++;
		return;
	}
	if(x==n and y==m and bz==0)
	{
		bz=1;
	}
	if(x>=3 and y>=2 and !mp[x-2][y-1])
	{
		mp[x-2][y-1]=1;
		dfs(x-2,y-1);
		mp[x-2][y-1]=0;
	}
	if(x>=3 and y<=4 and !mp[x-2][y+1])
	{
		mp[x-2][y+1]=1;
		dfs(x-2,y+1);
		mp[x-2][y+1]=0;
	}
	if(x>=2 and y>=3 and !mp[x-1][y-2])
	{
		mp[x-1][y-2]=1;
		dfs(x-1,y-2);
		mp[x-1][y-2]=0;
	}
	if(x>=2 and y<=3 and !mp[x-1][y+2])
	{
		mp[x-1][y+2]=1;
		dfs(x-1,y+2);
		mp[x-1][y+2]=0;
	}
	if(x<=4 and y>=3 and !mp[x+1][y-2])
	{
		mp[x+1][y-2]=1;
		dfs(x+1,y-2);
		mp[x+1][y-2]=0;
	}
	if(x<=4 and y<=3 and !mp[x+1][y+2])
	{
		mp[x+1][y+2]=1;
		dfs(x+1,y+2);
		mp[x+1][y+2]=0;
	}
	if(x<=3 and y>=2 and !mp[x+2][y-1])
	{
		mp[x+2][y-1]=1;
		dfs(x+2,y-1);
		mp[x+2][y-1]=0;
	}
	if(x<=3 and y<=2 and !mp[x+2][y+1])
	{
		mp[x+2][y+1]=1;
		dfs(x+2,y+1);
		mp[x+2][y+1]=0;
	}
}

求各位神犇帮帮本蒟蒻

2024/4/13 15:48
加载中...