C语言 数据结构

来源:百度知道 编辑:UC知道 时间:2024/05/05 11:16:03
马踏棋盘--国际棋盘 8*8 64格子 马放在任意一个位置走动 要求一次走完64格 不重复走. 马走的规则是--日 马在(I,J) 它可以走到8个位置
(I+2,J+3)(I-2,J+3)(I+2,J-3)(I+2,J-3)
(I+3,J+2)(I+3,J-2)(I-3,J+2)(I+3,J-2)
编写代码 将马的行走路线标出(1-64)

输入空格回车之后就可以出现一个答案;;得你的分可真不容易啊!!!我运行通过...
#include<stdio.h>
int delta_i[]={2,1,-1,-2,-2,-1,1,2};/*存储马各个出口位置相对当前位置行下标的增量数组*/
int delta_j[]={1,2,2,1,-1,-2,-2,-1};
int board[8][8];
int exitn(int i,int j,int s,int a[])//求(i,j)的出口子函数
{
int i1,j1,k,count;
for(count=k=0;k<8;k++)
{
i1=i+delta_i[(s+k)%8];
j1=j+delta_j[(s+k)%8];
if(i1>=0 && i1<8 && j1>=0 &&j1<8 &&board[i1][j1]==0)
a[count++]=(s+k)%8;
}
return count;/*返回出口数*/
}
int next(int i,int j,int s)
{
int m,k,kk,min,a[8],b[8],temp;
m=exitn(i,j,s,a);
if(m==0)return -1;
for(min=9,k=0;k<m;k++)
{
temp=exitn(i+delta_i[a[k]],j+delta_j[a[k]],s,b);/*求(i,j)第a[k]号出口数*/
if(temp<min)
{
min=temp;
kk=a[k];
}
}
return kk;/* */
}
void main()
{
int sx,sy,i,j,step,no,start;
for(sx=0;sx<8;sx++)
for(sy=0;sy<