DFS解马走日问题

这篇博客探讨了如何使用深度优先搜索(DFS)算法解决马在n*n棋盘上按'日'字形路径遍历所有格子的问题。在5*5的棋盘上,存在304种不同的解决方案。文章将这一问题转化为在具有8个分支的深层树中寻找所有可能路径的挑战。
摘要由CSDN通过智能技术生成
问题描述

在n*n的棋盘中,马只能走"日"字。马从位置(0,0)出发,把棋盘的每一格都走一次且只走一次。找出所有路径。 5*5的棋盘上,有304种解。


问题分析
搜索过程是从(0,0)出发,按照深度优先的原则,从8个方向中尝试一个可以走的点,直到尝试过所有的方向,走完棋盘上的所有点,得出所有的解。

马走日问题可以看成是在层数为n*n的8叉树中,找出所有的解。

#include "stdio"

int N =5;//棋盘大小为5*5
int martic[N][N];//代表棋盘的数组
int count = 0;//走的步数
int solution = 0;//方法数量
int step[8][2] = {
  {-1,-2},{-2,-1}, {-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};//要走的八个方向

int isok(int x,int y)//判断这一步是否符合规则
{
	if ((x>=0&&x<N&&y>=0&&y<N&&martic == 0))
	{
		return true;
	}
	else
	{
		return false;
	}
}

void display()//如果整个棋盘已经走满,就输出整个棋盘
{
	printf("th
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值