资源简介
马踏棋盘算法 马踏棋盘 数据结构课程设计 马踏棋盘课程设计 C语言编写
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#define CLS system(“cls“)
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 1
#define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */
#define STACKINCREMENT 2 /* 存储空间分配增量 */
#define N 8 /*定义棋盘大小*/
typedef int Status;
typedef struct chess
{
int x;
int y;
int z;
}chess;
typedef chess SElemType;
int map[N][N][8]; /*按各点权值递升存放待走方向每点8个*/
int weight[N][N]; /*各点的权值*/
int board[N][N]; /*棋盘未走过时值为0走过后值为1*/
static SElemType HTry[8] = /* 8个候选方向的偏移值*/
{
{-2 1 0}{ -1 2 0}{ 1 2 0}{ 2 1 0}{ 2 -1 0} {1 -2 0} {-1 -2 0} {-2 -1 0}
};
void setweight();/*求各点权值*/
void setmap(); /*各点的8个方向按权值递增排列*/
void Path(int x int y); /*主算法函数踏遍棋盘*/
/*栈的顺序存储表示 */
typedef struct SqStack
{
SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */
SElemType *top; /* 栈顶指针 */
int stacksize; /* 当前已分配的存储空间,以元素为单位 */
}SqStack; /* 顺序栈 */
Status InitStack(SqStack *S) /* 构造一个空栈S */
{
(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base;
(*S).stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack S)
{ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
Status GetTop(SqStack SSElemType *e)
{ /* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
if(S.top>S.base)
{
*e=*(S.top-1);
return OK;
}
else
return ERROR;
}
Status SetTop(SqStack SSElemType *e)
{
if(S.top>S.base)
{
*(S.top-1)=*e;
return OK;
}
else
return ERROR;
}
Status Push(SqStack *SSElemType e)
{ /* 插入元素e为新的栈顶元素 */
if((*S).top-(*S).base>=(*S).stacksize) /* 栈满,追加存储空间 */
{
(*S).base=(SElemType *)realloc((*S).base((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW); /* 存储分配失败 */
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
Status Pop(SqStack *SSElemType *e)
{ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
void main()/*主函数*/
{
int xy;
int ijk=0;
for(i=0;i for(j=0;j board[i][j]=0;
setweight();
setmap();
while(1)
{
printf(“输入马的行坐标 X (from 0 to 7):“);
scanf(“%d“&x);
printf(“输入马的列坐标 Y (from 0 to 7):“);
scanf(“\n%d“&y);
if(x<0||x>7||y<0||y>7)
{printf(“输入错误!\n\n“);
flushall();}
else
break;
}
Path(xy);
}/*end main()*/
/*求各点权值:可走的方向数.该值越小则被上一点选中的可能性越大*/
void setweight()
{
int ijkx1y1;
for(i=0;i {
for(j=0;j<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10671 2007-07-03 04:26 马踏棋盘\马踏棋盘.cpp
文件 233472 2007-07-03 10:19 马踏棋盘\马踏棋盘.doc
文件 208971 2007-07-01 23:36 马踏棋盘\马踏棋盘.exe
目录 0 2007-07-03 12:01 马踏棋盘
----------- --------- ---------- ----- ----
453114 4
- 上一篇:MFC利用CSOCKET实现的小小聊天室
- 下一篇:super pi源码
评论
共有 条评论