• 大小: 177KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-06
  • 语言: C/C++
  • 标签: 马踏棋盘  

资源简介

马踏棋盘算法 马踏棋盘 数据结构课程设计 马踏棋盘课程设计 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


评论

共有 条评论