gthe
outputv14.elseoutput“
osolutio
”回溯
4算法实现的关键技巧
fvoidexitpoi
tp
参数:poi
t功能:计算出下一步可能位置按其各个位置下一个位置的和压栈到s中算法描述:接受参数传来的值,按次序加上i
thorizo
tal21122112i
tvertical12211221再根据legal函数来判断是否合法(x07y07)是,则保存在poi
tap中,再按各自下一步的数目从大到小排序。最后,将ap中的点压栈。
i
t
umberpoi
tp
参数:poi
t功能:找出当前位置下一步的各种可能位置计算可能之和算法描述:接受参数传来的值,按次序加上i
thorizo
tal21122112i
tvertical12211221再根据legal函数来判断是否合法(x07y07)是,则加1并将值返回
void
extpoi
tp
参数:poi
t功能:找出各个位置并将其步数记录算法描述:将其步数记录在board的相应位置,并将这点压栈到s1判断步数是否小于64,再根据这四个条件选择执行其中的一个,再递归调用
ext
boollegalpoi
tp
参数:poi
t功能:判断是否可行,合法(是否在棋盘上,是否走过)算法描述:用这样的语句ifpx0px
py
py0boardpxpy0retur
trueelseretur
false
第三部分实验结果与分析
1实验数据及结果
测试数据和运行输出及结果
f2实验分析及结论
实验框架
f具体分析见回溯法的一般思路结论:马可以从任何一格出发恰好访问每个方格一次,并回到起始位置上。
第四部分心得与展望
1自我评价及心得体会
评价:整个算法的实现挺完整的体会:算法中的每个函数的功能尽量单一,调用函数时要注意是否修改了其他参数的值。一定要静下心去做。调试也很重要,从中能知道错在哪里。
2展望
据知用启发式搜索会更快一点,但现在我还是没有学会用这种方法解决这个问题。
第五部分附录
1程序主要界面
f2源程序
SqStackhpragmao
cedefi
eOK1defi
eERROR0defi
eOVERFLOW2defi
eSTACK_INIT_SIZE8defi
eSTACKINCREMENT57typedefstructi
txypoi
ttypedefpoi
tSElemTypetypedefi
tStatustypedefstructSElemTypebaseSElemTypetopi
tstacksizeSqStackStatusI
itStackSqStacksStatusPushSqStacksSElemTypee
fStatusPopSqStacksSElemTypeeSqStackcppi
clude