骑士巡游数据结构课程设计完成版

发布 2022-10-05 21:15:28 阅读 9628

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 初始化时每个方格都是关闭的,一个...