马步遍历问题,菜鸟仍是搞不懂
/*
马步遍历,实现每个步法
编译没错,算不出来,求解
*/
#include"stdio.h"
#define n 5//棋盘大小尺寸为5
int a[n+4][n+4],s=0;
void next(int,int,int);
void show()//输出
{
printf("\n--------------%d----------------\n",++s);
int i,j;
for(i=2;i<=n+1;i++){
for(j=2;j<=n+1;j++){
printf("%3d",a[i][j]);
}printf("\n");
}
}
void ok(int i,int j,int p)//判断
{
if(a[i][j]==0&&i>=2&&i<=n+1&&j>=2&&j<=n+1){
++p;
a[i][j]=p;
if(p==n*n) show();
next(i,j,p);
}
else return;
}
void next(int i,int j,int p)//循环
{
ok(i+2,j-1,p);
ok(i+2,j+1,p);
ok(i-2,j+1,p);
ok(i-2,j-1,p);
ok(i+1,j+2,p);
ok(i+1,j-2,p);
ok(i-1,j-2,p);
ok(i-1,j+2,p);
return;//是这么用吧??
}
void main()
{
int i,j,p,q;
for(i=2;i<=n+1;i++)//每个格子马都走
for(j=2;j<=n+1;j++){
for(p=0;p<=n+3;p++)//棋盘清零
for(q=0;q<=n+3;q++)
{a[p][q]=0;}
a[i][j]=1;
next(i,j,1);
}
}
[解决办法]
你可以再加个flag 标识是否是走回步的
吃饭去咯