算法思想:每次随机选一个初始位置,按照逆时针的方向每次向下试探,在试探到走不通的格子后,就退回上一个格子,偏转到下一个方向继续试探,直至所有的格子被走遍;
界面编程:利用vc++的easyx插件进行绘图;
#include <graphics.h>//设计图形界面所必须的头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <time.h>//显示时间的头文件
#include <mmsystem.h>//播放音效所需的头文件
#pragma comment(lib, "WINMM.LIB")//播放音效所需的头文件
#define N 20
typedef struct location {
int x;
int y;
}LOC;//记录马的当前位置
typedef struct node {
LOC loc;//当前坐标
int num;//存储该坐标当前已经试探过的方向!
struct node * pNext;
}NODE,*PNODE;
typedef struct stack {
struct node * top;//栈顶指针
struct node * bottom;//栈底指针
}STACK,*PSTACK;
void init(); //初始化栈
void push(LOC loc); //进栈
void pop(); // 出栈,注意要判空
int empty(); //判空栈
void trave(); //输出马的行走路线
void clear(); //置空栈
PNODE GetTop(); //取栈顶元素
LOC check(); //寻找试探下一个有效的格子
int check1(LOC n); //判断该格子当前是否已经走过
void jiemian(); //
void Time();
LOC beforegame();
STACK sp;
PSTACK s = &sp;//s表示马的行进路径,全局变量必须在定义的同时初始化,否则会报错
LOC size[64];//存储马的坐标
int f = 0,k,size1[64] = {0};
int curpos=0; //总共走了多少步。
int qipanjud[8][8] = {
{0}};//标记该格子是否已经走过,1表示走过,0表示没走
int main(void) {
LOC loc,n;//坐标
int flag;
char a[N];
flag = 1;
jiemian();
loc = beforegame();
init();//初始化栈
size[f] = loc;//记录已经走过的坐标
qipanjud[loc.x][loc.y]=1; //已经走过增加棋盘标识
settextcolor(BLACK); //设置文字的颜色
settextstyle(40, 0, _T("宋体"));//设置字体
RECT r = {0+(size[f].x-1)*80,0+(size[f].y-1)*80,80+size[f].x*80,80+size[f].y*80};//定义一个矩形绘图区域
setfillcolor(DARKGRAY);//设置填充颜色为灰色
fillrectangle(0+(size[f].x-1)*80,0+(size[f].y-1)*80,size[f].x*80,size[f].y*80);//用灰色填充指定矩形区域
sprintf(a, "%d", curpo