实验报告 马踏棋盘Word文件下载.docx

上传人:b****4 文档编号:17693685 上传时间:2022-12-08 格式:DOCX 页数:11 大小:69.42KB
下载 相关 举报
实验报告 马踏棋盘Word文件下载.docx_第1页
第1页 / 共11页
实验报告 马踏棋盘Word文件下载.docx_第2页
第2页 / 共11页
实验报告 马踏棋盘Word文件下载.docx_第3页
第3页 / 共11页
实验报告 马踏棋盘Word文件下载.docx_第4页
第4页 / 共11页
实验报告 马踏棋盘Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验报告 马踏棋盘Word文件下载.docx

《实验报告 马踏棋盘Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验报告 马踏棋盘Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

实验报告 马踏棋盘Word文件下载.docx

 

int 

x;

int 

y;

from;

}Point;

(2)、栈的存储方式 

#define 

STACKSIZE 

70 

STACKINCREASE 

10 

Stack 

Point 

*top;

*base;

stacksize;

};

(1)、设定栈的抽象数据类型定义:

ADT 

数据对象:

D={ai 

ai∈ElemSet,i=1,2,„,n,n≥0} 

数据关系:

R1={<

ai-1 

 

ai>

|ai-1, 

ai∈D,i=2,„,n} 

约定an端为栈顶,ai端为栈顶。

基本操作:

InitStack(&

s) 

操作结果:

构造一个空栈s, 

DestroyStack(&

初始条件:

栈s已存在。

操作结果:

栈s被销毁。

ClearStack(&

栈s清为空栈。

StackEmpty(&

若栈s为空栈,则返回TRUE,否则返回FALSE。

StackLength(s);

初始条件:

栈s存在。

返回s的元素个数,即栈的长度。

GetTop 

(s,&

e);

栈s已存在且非空。

用e返回s的栈顶元素。

Push(&

s,e) 

插入元素e为新的栈顶元素。

Pop(&

s,&

e) 

栈s存在且非空。

删除栈顶元素,并用e返回。

stackTraverse(s,visit()) 

从栈底到栈顶依次对s的每个元素调用visit()。

一旦visit()失败,则操作失败。

}ADT 

Stack

本程序包含模块:

1、主程序模块:

void 

main(){定义变量;

接受命令;

处理命令;

退出;

}

2、起始坐标函数模块——马儿在棋盘上的起始位置;

3、探寻路径函数模块——马儿每个方向进行尝试,直到试完整个棋盘;

4、输出路径函数模块——输出马儿行走的路径;

3.详细设计

1.函数声明 

VoidInitLocation(intxi,int 

yi);

//马儿在棋盘上的起始位置标 

TryPath(int 

i,int 

j);

//马儿每个方向进行尝试,直到试完整个棋盘 

Display();

//输出马儿行走的路径 

2. 

起始坐标函数模块 

InitLocation(int 

xi,int 

yi) 

x,y;

//定义棋盘的横纵坐标变量

top++;

//栈指针指向第一个栈首 

stack[top].i=xi;

//将起始位置的横坐标进栈 

stack[top].j=yi;

//将起始位置的纵坐标进栈 

stack[top].director=-1;

//将起始位置的尝试方向赋初值 

board[xi][yi]=top+1;

//标记棋盘 

x=stack[top].i;

//将起始位置的横坐标赋给棋盘的横标 

y=stack[top].j;

//将起始位置的纵坐标赋给棋盘的纵坐标 

if(TryPath(x,y)) 

//调用马儿探寻函数,如果马儿探寻整个棋盘返回1否则0 

//输出马儿的行走路径 

else 

printf("

无解"

);

3. 

探寻路径函数模块

j) 

find,director,number,min;

//定义几个临时变量 

i1,j1,h,k,s;

a[8],b1[8],b2[8],d[8];

//定义几个临时数组 

while(top>

-1) 

//栈不空时循环 

for(h=0;

h<

8;

h++) 

//用数组a[8]记录当前位置的下一个位置的可行路径的条数 

number=0;

i=stack[top].i+Htry1[h];

j=stack[top].j+Htry2[h];

b1[h]=i;

b2[h]=j;

if(board[i][j]==0&

&

i>

=0&

i<

8&

j>

j<

8) 

//如果找到下一位置 

for(k=0;

k<

k++) 

i1=b1[h]+Htry1[k];

j1=b2[h]+Htry2[k];

if(board[i1][j1]==0&

i1>

i1<

j1>

j1<

//如果找到下一位置 

number++;

//记录条数 

a[h]=number;

//将条数存入数组a[8]中 

//根据可行路径条数小到大按下表排序放d[8]中

min=9;

if(min>

a[k]) 

min=a[k];

d[h]=k;

//将下表存入数组d[8]中 

s=k;

a[s]=9;

director=stack[top].director;

if(top>

=63) 

//如果走完整个棋盘返回1 

return 

(1);

find=0;

//表示没有找到下一个位置 

for(h=director+1;

//向八个方向进行探寻 

i=stack[top].i+Htry1[d[h]];

j=stack[top].j+Htry2[d[h]];

if(board[i][j]==0&

find=1;

//表示找到下一个位置 

Break;

if(find==1) 

//如果找到下一个位置进栈 

stack[top].director=director;

//存储栈结点的方向 

top++;

//栈指针前移进栈 

stack[top].i=i;

stack[top].j=j;

//重新初始化下一栈结点的尝试方向 

board[i][j]=top+1;

else 

//否则退栈 

board[stack[top].i][stack[top].j]=0;

//清除棋盘的标记 

top--;

//栈指针前移退栈 

(0);

4. 

输出路径函数模块

Display() 

i,j;

for(i=0;

N;

i++) 

for(j=0;

j++) 

\t%d 

"

board[i][j]);

//输出马儿在棋盘上走过的路径 

printf("

\n\n"

printf("

\n"

四、测试数据及测试结果 

测试数据:

x=2,y=3 

测试结果如下:

5.原程序代码

#include<

stdio.h>

MAXSIZE 

100 

board[8][8];

//定义棋盘 

Htry1[8]={1,-1,-2,2,2,1,-1,-2};

/*存储马各个出口位置相对当前位置行下标的*/ 

Htry2[8]={2,-2,1,1,-1,-2,2,-1};

/*存储马各个出口位置相对当前位置列下标的增量数组*/ 

Stack{ 

//定义栈类型 

i;

//行坐标 

j;

//列坐标

director;

//存储方向

}stack[MAXSIZE];

//定义一个栈数组

top=-1;

//栈指针

//马儿在棋盘上的起始位置坐标 

//输出马儿行走的路径

yi)

//定义棋盘的横纵坐标变量 

//将起始位置的横坐标赋给棋盘的横坐标 

//调用马儿探寻函数,如果马儿探寻整个棋盘返回1否则返回0 

//定义几个临时变量

//栈不空时循环

for(h=0;

number=0;

b1[h]=i;

b2[h]=j;

for(k=0;

k++)

i1=b1[h]+Htry1[k];

//如果找到下一位置 

//根据可行路径条数小到大按下表排序放

入数组d[8]中

min=9;

If(min>

 

d[h]=k;

a[s]=9;

j=stack[top].j+Htry2[d[h]];

break;

stack[top].i=i;

stack[top].j=j;

board[stack[top].i][stack[top].j]=0;

return 

Display()

main()

//初始化棋盘 

for(j=0;

board[i][j]=0;

for(;

;

) 

Please 

input 

importpoint(1<

=x<

=8 

and 

1<

=y<

=8)\n"

Input 

scanf("

%d"

&

x);

//输入起始位置的横坐标 

scanf("

y);

//输入起始位置的纵坐标 

if(x>

=1&

x<

=8&

y>

y<

=8)break;

Your 

is 

worng!

!

begin 

with 

%d 

board:

8*(x-1)+y);

InitLocation(x-1,y-1);

//调用起始坐标函数

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1