資源簡介
設計一個國際象棋的馬踏遍棋盤的演示程序。
將馬隨機放在國際象棋的8×8棋盤Board[8][8]的某個方格中,馬按走棋規則(見題集p98)進行移動。要求每個方格只進入一次,走邊棋盤上全部64個方格。編制非遞歸程序,求出馬的行走路線,并按求出的行走路線,將數字1,2,3,…,64依次填入一個8×8的方陣,輸出之。
代碼片段和文件信息
#include
using?namespace?std;
//===========================================
typedef?struct{??????//儲存當前坐標和方向
int?k;
int?l;
int?leve;
}Seat;
typedef?struct{???????//棧的結構
Seat?*base;
Seat?*top;
int?stacksize;
}SqStack;
//===========================================
#define?OK?1
#define?ERROR?0
#define?OVERFLOW?-1
#define?STACK_INIT_SIZE?1000
#define?STACKINCREMENT?100
int?Bord[8][8];?????????//棋盤
int?m=0n=0i=0j=0;
int?leve=1;?????????????//探索方向
int?count=0;
//===========================================
void?InitStack(SqStack?&S){???????????????????????????????//棧初始化
S.base=(Seat*)malloc(STACK_INIT_SIZE*sizeof(Seat));
????if(!S.base)exit(OVERFLOW);
S.top=S.base;
????S.stacksize=STACK_INIT_SIZE;
}
void?GetTop(SqStack?&SSeat?&Se){?????????????????//取棧頂元素
Se=*(S.top-1);
}
void?PoTop(SqStack?&S){????????????????????????//刪除棧頂元素
S.top=S.top--;
}
void?Push(SqStack?&SSeat?&Se){????????????????//向棧里壓入元素
if(S.top-S.base>=S.stacksize){
????S.base=(Seat*)realloc(S.base
????(S.stacksize+STACKINCREMENT)*sizeof(Seat));
????if(!S.base)exit(OVERFLOW);
????S.top=S.base+S.stacksize;
????S.stacksize+=STACKINCREMENT;
}
???*S.top=Se;
???++S.top;
}
int?StackNEmpty(SqStack?&S){????????????????????//判斷棧是否為空
???if(S.top==S.base)?
?????return?0;
???else
?????return?-1;
}
void?Level(int?&mint?&nint?&iint?&jint?&leve){???????//探索方向函數
switch(leve){
cas
- 上一篇:c++ http
- 下一篇:c語言課件-循環結構
評論
共有 條評論