马踏棋盘演示程序的设计

马踏棋盘演示程序设计题目:马踏棋盘班级:02级计算机2班 姓名:刘晓明 学号:200201020219完成日期:2004年11月20日需求分析将马随即放在国际象棋的8×8棋盘Board[8][8]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,……,64依次填入一个8×8的方阵,输出之。测试数
摘要由CSDN通过智能技术生成

马踏棋盘演示程序设计

题目:马踏棋盘

班级:02级计算机2 姓名:刘晓明 学号:200201020219

完成日期:20041120

需求分析

将马随即放在国际象棋的8×8棋盘Board[8][8]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。编制非递归程序,求出马的行走路线,并按求出的行走路线,将数字1,2,……,64依次填入一个8×8的方阵,输出之。

测试数据:由读者指定。可自行指定一个马的初始位置(i,j),0<=i,j<=7

设计思路

按照顺时针顺序,每次产生一个新的路点,并验证此路点的可用性,需要考虑的问题包括是否超出棋盘和此点已经走过与否。如新路点可用,则入栈,并执行下一步,每次按照上一路点的位置生成新路点。如一个路点的可扩展路点数为0,则走不下去了,进行回溯。

概要设计

程序中使用了菜单式设计,操作的输入输出均有提示。主要文件分为dsoper.hui.h。分别负责数据结构操作和用户界面显示。

dsoper.h中的主要函数解释如下:

l         void Calc(HorsePoint init)用于计算路程的入口函数

l         HorsePoint GetNewPoint(HorsePoint *parent) parent节点产生一个新节点,方向按照parent.dir方向递增

l         void PushStack(HorsePoint pos)入栈

l         void PushStack(HorsePoint pos, int dir)入栈重载函数

l         HorsePoint PopStack(void)出栈

l         void initial(void) 初始化应用程序各个全局变量

 

ui.h中的主要函数解释如下:

l         HorsePoint GetInitPoint(void) 请求输入马的初始位置

l         CmdChar GetCommand(void) 显示菜单,并从其中获取菜单命令

l         void ShowTable(void) 按照棋盘模型显示输出数据

l         void ShowStep(void) 按照步进模型显示输出数据

l         void SaveToFile(void) 保存到文件rt.txt

 

数据结构定义:

typedef struct horsepoint

{

    int x;

    int y;

    int dir;    //下一步的走向,初始化-1,有效0-7

}HorsePoint;

其中dir分量用于指示相对于当前路点的下一路点方向,

 

全局变量定义:

bool Board[WIDTH][WIDTH] 定义棋盘中各点是否已经走过,未走为false

HorsePoint Path[MAX_LEN] 定义马的行走路径

int scount已经进入路径栈的元素个数

程序源代码

文件main.cpp

/*

  Name: main.cpp

  Copyright: Copyright@1999-2004, Gashero Liu.

  Author: Gashero Liu.

  Date: 16-11-04 20:41

  Description: 程序主文件,仅含main函数

*/

#include <iostream>

#include <stdlib.h>

 

#ifndef DATASTRUCT_H

#define DATASTRUCT_H

#include "datastruct.h"

#endif

#ifndef DSOPER_H

#define DSOPER_H

#include "dsoper.h"

#endif

#ifndef UI_H

#define UI_H

#include "ui.h"

#endif

 

using namespace std;

 

//--------------------------------全局变量定义 ---------------------------------

bool Board[WIDTH][WIDTH];       //定义棋盘中各点是否已经走过,未走false

HorsePoint Path[MAX_LEN];       //定义马的行走路径

int scount;                      //已经进入路径栈的元素个数

 

 

int main(int argc, char *argv[])

{

    CmdChar cmd;    //命令字符

    HorsePoint init;//马的初始位置

    initial();

    while((cmd=GetCommand())!=CMD_EXIT)

    {

        switch(cmd)

        {

            case CMD_NEW:

            {

                init=GetInitPoint();

                Calc(init);

                              break;

            }

            case CMD_TABLE:

            {

                ShowTable();

                              break;

            }

            case CMD_STEP:

            {

                ShowStep();

                              break;

            }

            case CMD_SAVE:

            {

                SaveToFile();

                              break;

            }

        }

    }                       

    //system("PAUSE");       

    return 0;

}

 

文件dsoper.h:

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值