问题描述
国际象棋的棋盘为8×8的方格棋盘。现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘的64个方格。
编写一个C程序,实现马踏棋盘操作,要求用1〜64这64个数字标注马移动的路径,也就是按照求出的行走路线,将数字1,2,……64依次填入棋盘的方格中,并输出。
问题分析
国际象棋中,“马”的移动规则如图1所示。
○
○
○
○
●
○
○
○
○
图1
如图1所示,图中实心的圆圈代表“马”的位置,它下一步可移动到图中空心圆圈所标注的8个位置上,该规则叫做“马走日”。但是如果“马”位于棋盘的边界附近,那么它下一步可移动到的位置就不一定有8个了,因为要保证“马”每一步都走在棋盘中。
马踏棋盘的问题其实就是要将1,2,……,64填入到一个8×8的矩阵中,要求相邻的两个数按照“马”的移动规则放置在矩阵中。
例如数字a放置在矩阵的(i,j)位置上,数字a+1只能放置在矩阵的(i-2,j+1),(i-1,j+2),(i+1,j+2),(i+2,j+1),(i+2,j-1),(i+1,j-2),(i-1,j-2),(i-2,j-1)之中的一个位置上。将矩阵填满并输出。