马塔棋盘
# 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 ");
}
}