头文件:
void InitStack(Stack &S)
{
S.top=-1;
}
void Push(Stack& S,const ElemType& item)
{
if(S.top==StackMaxSize-1){
cerr<<"Stack overflow!"<<endl;
exit(1);
}
S.top++;
S.stack[S.top]=item;
}
int StackEmpty(Stack &S)
{
return S.top==-1;
}
items Pop(Stack &S)
{
if(S.top==-1){
cerr<<"Stack is empty!"<<endl;
exit(1);
}
ElemType temp=S.stack[S.top];
S.top--;
return temp;
}
ElemType Peek(Stack& S)
{
if(S.top==-1){
cerr<<"Stack id empty!"<<endl;
exit(1);
}
return S.stack[S.top];
}
原程序:
#include<iostream.h>
#include<stdlib.h>
const int StackMaxSize=63;
struct items
{//定义描述棋盘中当前位置的结构
int x,y;//X和Y分别表示当前位置的行坐标和列坐标,
//D表示移动到下一步的方向
};
typedef items ElemType;//定义栈中元素的类型为ITEMS的类型
struct Stack{
ElemType stack[StackMaxSize];
int top;
};
#include"stack1.h"
int d1[8]={-2,-1,1,2,2,1,-1,-2};
int d2[8]={1,2,2,1,-1,-2,-2,-1};

int M[12][12]={3,3,3,3,3,3,3,3,3,3,3,3,
        3,3,3,3,3,3,3,3,3,3,3,3,
        3,3,0,0,0,0,0,0,0,0,3,3,
               3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,0,0,0,0,0,0,0,0,3,3,
 3,3,3,3,3,3,3,3,3,3,3,3,
 3,3,3,3,3,3,3,3,3,3,3,3
};
void main()
{
int x(4),y(5),k,j,s(1),g(0);
// int x,y;
    Stack S;//栈的元素类型应定义为items
InitStack(S);
    items e ;
items e1;
    


   // cout<<M[i][j];
do{
  if(M[x][y]==1||M[x][y]==3)
{

x=e.x+d1[g];
y=e.y+d2[g];
g++;
if(g==8){


// cout<<e.x<<e.y;
e=Pop(S);
               M[e.x][e.y]=0;
   e1=Peek(S);
// cout<<e.x<<e.y;
for(j=0;j<8;j++){
if(d1[j]==(e.x-e1.x)&&d2[j]==(e.y-e1.y))g=j+1;

}
}

}
if(M[x][y]==0)
{
g=0;
e.x=x;
e.y=y;
            Push(S,e);
M[x][y]=1;
s+=M[x][y];
}
}while(s!=64);
for(k=0;k<64;k++)
{
e=Pop(S);
cout<<"("<<e.x-2<<","<<e.y-2<<")"<<",";
}
}