1. 骑士巡游的求解是一个经典的算法,许多数学家,程序员在不断寻早改善求解方法。对骑士巡游问题的研究中可包括贪心算法,回溯算法,穷举算法。本例是通过穷举算法,加深对数据穷举的理解。
2. 在对已经走过的路线里,采用标志矩阵进行记录。标志矩阵的引入利用了数据的线性存储。
3. 利用穷举算法,标志矩阵实现简单的骑士巡游算法。
整个实验完成一个骑士巡游算法,本实验中骑士巡游的实现通过穷举举例和标志矩阵。
1. 创建模块。根据输入的行列数创建标志矩阵。
2. 操作模块。 输入骑士的初始位置,进行骑士巡游操作。
3. 显示模块。显示出巡游结果。
1. 在进入main()函数之后立即执行菜单, 输入行列数,本实验中,行列最大11。
执行流程如图:
图2 主函数main()的流程图。
本模块先要求输入要创建的棋盘的行列数。程序给出标志矩阵。
输入骑士初始位置,进行巡游。
现实巡游结果。
利用标志矩阵,行优先,循序存取,对巡游过的方格标志,通过简单的算法将标志矩阵与棋盘位置进行转换。
#include <>
int f[11][11定义一个矩阵来模拟棋盘*/
int adjm[121][121];/标志矩阵,即对于上述棋盘,依次进行编号。
1--121(行优先)可以从一个棋盘格i跳到棋盘格j时,adjm[i][j]=1*/
void creatadjm(void创建标志矩阵函数声明*/
void mark(int,int,int,int将标志矩阵相应位置置1*/
void tr**el(int,int巡游函数声明*/
int n,m定义矩阵大小及标志矩阵的大小*/
主函数。int main()
int i,j,k,l;
printf("please input size of the chessboard: "输入矩阵的大小值*/
scanf("%d",&n);
m=n*n;
creatadjm创建标志矩阵*/
puts("the sign matrix is:")
for(i=1;i<=m;i打印输出标志矩阵*/
printf("please input the knight's position (i,j): 输入骑士的初始位置*/
scanf("%d %d",&i,&j);
l=(i-1)*n+j骑士当前位置对应的标志矩阵的横坐标*/
while ((i>0)||j>0对骑士位置的判断*/
printf("please input the knight's position (i,j): 为再次巡游输入起始位置*/
scanf("%d %d",&i,&j);
l=(i-1)*n+j;
puts(" press any key to quit...
getchar();
return 0;
创建标志矩阵子函数。
void creatadjm()
int i,j;
for(i=1;i<=n;i巡游矩阵初始化*/
for(j=1;j<=n;j++)
f[i][j]=0;
for(i=1;i<=m;i标志矩阵初始化*/
for(j=1;j<=m;j++)
adjm[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][j]==0对所有符合条件的标志矩阵种元素置1*/
f[i][j]=1;
if((i+2<=n)&&j+1<=n)) mark(i,j,i+2,j+1);
if((i+2<=n)&&j-1>=1)) mark(i,j,i+2,j-1);
if((i-2>=1)&&j+1<=n)) mark(i,j,i-2,j+1);
if((i-2>=1)&&j-1>=1)) mark(i,j,i-2,j-1);
if((j+2<=n)&&i+1<=n)) mark(i,j,i+1,j+2);
if((j+2<=n)&&i-1>=1)) mark(i,j,i-1,j+2);
if((j-2>=1)&&i+1<=n)) mark(i,j,i+1,j-2);
if((j-2>=1)&&i-1>=1)) mark(i,j,i-1,j-2);
return;
巡游子函数。
void tr**el(int p,int r)
int i,j,q;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(f[i][j]>r) f[i][j]=0棋盘矩阵的置〉r时,置0*/
r=r+1; /跳步计数加1*/
i=((p-1)/n)+1还原棋盘矩阵的横坐标*/
j=((p-1)%n)+1还原棋盘矩阵的纵坐标*/
f[i][j]=r将f[i][j]做为第r跳步的目的地*/
for(q=1;q<=m;q从所有可能的情况出发,开始进行试探式巡游*/
数据结构课程设计
课程设计说明书 题目哈夫曼编码问题的设计和实现。课程名称数据结构课程设计。院 系 部 中心。专业。班级。学生姓名。学号。设计地点。指导教师。设计起止时间 2008 年6月 2日至 2008 年 6月 6 日。目录。1 问题描述 2 1.1 题目内容 2 1.2 基本要求 2 1.3 测试数据 2 2...
数据结构课程设计
数据结构 课程设计。实验报告。学院 信息工程学院。班级 姓名 学号 指导老师 题目2 一元多项式的计算。1 实验目的。1 掌握链表的灵活运用 2 学习链表初始化和建立一个新的链表 3 知道怎样去实现链表删除结点操作与插入结点 4 理解链表的基本操作 包括数据域数据的相加 并能灵活运用。2 实验内容。...
数据结构课程设计
班级 信计 1102 姓名 李娜娜。学号 1108060209 设计日期 2013.07.15 西安科技大学计算机学院 1.实验题目 编制一个演绎扫雷游戏的程序。2.问题描述。做一个n x m的扫雷游戏,每个方格包含两种状态 关闭 closed 和打开 opened 初始化时每个方格都是关闭的,一个...