马塔棋盘

# include & ltstdio.h & gt

# include & ltiostream.h & gt

void init array(int Dushu[9][9])//使用dushu[][]存储初始状态下各点的读数。

{

int walkway[9][3]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},

{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};//存储走位规则,使数组下标与棋盘下标一致。

int i,j,k,x,y;//i,j,k用于计数,x,y用于计算新点的坐标。

for(I = 1;我& lt=8;I++) //最初为零。

for(j = 1;j & lt=8;j++)

dushu[I][j]= 0;

for(I = 1;我& lt=8;I++) //计算每个点的度数并存储。

for(j = 1;j & lt=8;j++)

for(k = 1;k & lt=8;k++)

{

x = I;y = j;

x = x+走道[k][1];

y = y+走道[k][2];

if(x & gt;=1。& ampx & lt= 8 & amp& ampy & gt=1。& ampy & lt=8)

dushu[I][j]++;

}

}

Voidcalcu (int output [9] [9],int dushu[9][9])//通过输出数组输出。

{

int x,y,m,n,I,j,z,k,min//x,y,m,n用于坐标计算,z,I,j,k用于计数,min用于比较最小度数。

int walkway[9][3]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},{5,2,1},{6,2,-1},{7,-2,1},{8,-2,

Printf("请输入起始坐标:x,y \ n ");

scanf("%d,%d ",& ampm & amp;n);//接收开始位置

如果(m & gt=1。& ampm & lt= 8 & amp& ampn & gt=1。& ampn & lt=8) //判断输入位置是否合法。

{

for(z = 1;z & lt=64;Z++) //每分钟64次写入

{

min = 8;

输出[m][n]= z;//使用output[][]记录所走的路径。

dushu[m][n]= 0;//行走设置为0,不行走设置为度。

for(k = 1;k & lt=8;K++) //取度数最小的点。

{

x = m+走道[k][1];

y = n+走道[k][2];//x,y代表下一步后的坐标,通过k的增长改变行走方向。

if(x & gt;=1。& ampx & lt= 8 & amp& ampy & gt=1。& ampy & lt=8)

if(dushu[x][y]!=0) //从未走过

{

-dushu[x][y];//度减1

if(dushu[x][y]& lt;最小)

{

min = dushu[x][y];//a[x][y]存储到最小值的点。

I = x;

j = y;

}

}

} //for

m = I;n = j;//下一个点的坐标

}

}

其他

Printf("输入错误!");

}

void main()

{

int dushu[9][9],output[9][9];

int step[9][3]={{0,0,0},{1,1,2},{2,1,-2},{3,-1,2},{4,-1,-2},

{5,2,1},{6,2,-1},{7,-2,1},{8,-2,-1}};

int i,j;

init array(dushu);

calcu(输出,读书);

for(I = 1;我& lt=8;I++) //输出

{ for(j = 1;j & lt=8;j++)

printf("%6d ",output[I][j]);

printf(" \ n ");

}

}