首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

马步遍历有关问题,初学者仍是搞不懂

2012-05-12 
马步遍历问题,菜鸟仍是搞不懂/*马步遍历,实现每个步法编译没错,算不出来,求解*/#includestdio.h#define

马步遍历问题,菜鸟仍是搞不懂
/*
马步遍历,实现每个步法
编译没错,算不出来,求解
*/
#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 标识是否是走回步的 
吃饭去咯

探讨
引用:
引用:
引用:
回11楼,厉害!把p改为全局变量就行,
厉害个屁
你这个遍历 是指一步遍历完吗?
还是可以走不通往回走?
如果是走不通可以往回走的我就对了吧 要是要一步走完的我好像还是错了

肯定不是一步走完,我想把所有的走法列出来,看来还得想想

热点排行