马(糟)踏棋盘问题

马踏棋盘算法(骑士周游问题)

定义:将马随机放在国际象棋的8×8棋盘[0~7][0~7]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格
(可扩展为NxN的棋盘)

棋盘

鄙人小白,连续数天研究此问题。
也是老师布置的作业,某老师编写的教科书上面的代码思想为:

采用栈的数据结构,即将马的行走顺序压入栈中

具体步骤如下:
1)建立一个栈,定义其栈顶和栈底,以及栈的大小。
2)将马的初始步压入栈中,计算其8个方向的权值,各点的8个方向按权值升序排列。
3)马向最小权值方向行走,得到下一步,重复步骤(2)
4)某步的下一步超出棋盘,则应重新走,这一步出栈,由前一步重新选择方向。
5)最后,根据栈中内容将马的行走路线填入方阵中,输出

其中栈的作用就是保存马的路径,以便走错了之后“回溯”(悔棋)用
一开始并不明白是怎么回事,于是百度

方法一:深搜+回溯

找到了深搜+回溯的方法,思想就是一直在找下一个可以糟蹋的点,糟蹋后再找下一个点,同一个点只能走一次。
自己写代码如下:
主要函数及功能:
1)int NextStep(int *x, int *y , int step)找下一个可以糟蹋的点,参数为地址值,函数调用后,x,y值已经成为下一个点。
2)int Dfs(int x, int y, int count)深搜方法不断地往下一个走,直到踏遍所有点。

/*************************************************************************
    > File Name: mataqipan.c
    > Author:***
    > Mail: ***
    > Created Time: Fri 09 Oct 2015 02:27:36 PM EDT
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 8

int CHESS[N][N];

int NextStep(int *x, int *y , int step)
{
    switch(step)
    {
        case 0:
        {
            if(*x + 1 <= N -1 && *y - 2 >= 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值