在8×8的棋盘写非递归程序
输出行走路线 用堆栈结构实现非递归的马踏棋盘的算法,
我的代码 可是结果有问题 找不出来 #define NULL 0 #define N 8
typedef struct Elemtype{ int row; int col; }Elemtype; /*栈元素*/
typedef struct Nodetype{ Elemtype data; struct Nodetype *next; }Nodetype,*Linktype; /*结点类型*/
typedef struct Stack{ Linktype top; int size; }Stack; /*栈类型*/
void push(Elemtype value,Stack S) { Linktype newnode;
newnode=(Linktype)malloc(sizeof(Nodetype));
newnode->data=value;
newnode->next=S.top;
S.top=newnode;
S.size++;
}/*存入数据*/
Elemtype pop(Stack S) { Elemtype temp; Linktype s;
if(S.top->next) { s=S.top; S.top=s->next; temp=s->data; free(s); S.size--; return temp; }
} /*取出数据*/
CreateStack(Stack S) {
S.top=(Linktype)malloc(sizeof(Nodetype));
S.top->next=NULL;
S.size=0;
} /*创建栈*/
int jump(int i,int j,int a[N][N]) {
if(i<N&&i>=0&&j<N&&j>=0&&a[i][j]==0) return 1; else return 0; } /*判断可行点*/
void output(int a[N][N]) { int i,j; for(i=0;i<N;i++) { for(j=0;j<N;j++) { printf("%3d",a[i][j]); printf("\n"); } }
printf("\n");
} /*输出路径*/
void Delet(Stack S) { while(S.top) { Linktype temp; temp=S.top; S.top=temp->next; free(temp); } } /*输出路径*/
Stack S; Elemtype elem1, elem2,elem3;
main() { int HTry1[8]={-2,-1,1,2,2,1,-1,-2}; int HTry2[8]={1,2,2,1,-1,-2,-2,-1};
int board[N][N]={0};
int k,i,j,ti,tj,p=1,num=0;
printf("输入i,j的值:"); scanf("%d%d",&i,&j);
CreateStack(S);
elem1.row = i;
elem1.col = j;
push(elem1,S);
num++;
board[i][j] = num;
while( num>0 && num < 64) { for(k=0;k<8;k++) { i=i+HTry1[k]; j=j+HTry2[k];
if(jump(i,j,board[i][j])==1)
break;
} /*在点(i,j)周围8个点中寻找可扩展点*/
if(p==0) board[ti][tj]=0;
if(k<8) { elem2.row=i; elem2.col=j; push(elem2,S); num ++; board[i][j] = num; p=1; } /*在(i,j)周围八个点中找到的合适的入栈*/ else { elem2 = pop(S); ti=elem2.row; tj=elem2.col; p=0;
elem3=pop(S);
i=elem3.row; j=elem3.col; } /*8个点都不合适*/
}
output(board);
}