好文档 - 专业文书写作范文服务资料分享网站

算法设计与分析实验报告-棋盘覆盖问题

天下 分享 时间: 加入收藏 我要投稿 点赞

贵州大学计算机科学与技术学院

计算机科学与技术系上机实验报告

课程名称:算法设计与分析 班级:信计101班 姓名: 张 胜 实验序号:一 学号:1007010162 实验日期:2013-9-30 指导教师:程欣宇 实验成绩: 一、实验名称 分治算法实验 - 棋盘覆盖问题 二、实验目的及要求 1、熟悉递归算法编写; 2、理解分治算法的特点; 3、掌握分治算法的基本结构。 三、实验环境 Visual C++ 四、实验内容 根据教材上分析的棋盘覆盖问题的求解思路,进行验证性实验; 要求完成棋盘覆盖问题的输入、分治求解、输出。有余力的同学尝试消去递归求解。 五、算法描述及实验步骤 分治算法原理: 分治算法将大的分解成形状结构相同的子问题,并且不断递归地分解,直到子问题规模小到可以直接求解。 棋盘覆盖问题描述: 在一个2k x 2k个方格组成的棋盘中恰有一个方格与其他的不同称为特殊方格,想要求利用四种L型骨牌(每个骨牌可覆盖三个方格)不相互重叠覆盖的将除了特殊方格外的其他方格覆盖。 实验步骤: 1、定义用于输入和输出的数据结构; 2、完成分治算法的编写; 3、测试记录结构; 4、有余力的同学尝试不改变输入输出结构,将递归消除,并说明能否不用栈,直接消除递归,为什么? 六、调试过程及实验结果 实验运行结果: 七、总结 通过本次实验,我更深的理解了递归和分治策略。代码是书上的算法,加上主函数就行了,用的是C语言编写,很长时间没用了,感觉有点生疏。实验结果有点问题,就是覆盖棋盘时,并不是按照1,2,3….的字符顺序,而是按照很乱的顺序输出字符,这个我不知道怎么解决,就没解决。 八、附录 #include \#include \ int board[8][8] ={ {0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0} }; int tile=0; void chessBoard(int tr, int tc, int dr, int dc, int size) { int t=tile++, s=size/2; if (size==1) return; if (dr= tc+s) chessBoard(tr,tc+s,dr,dc,s); else { board[tr+s-1][tc+s]=t; chessBoard(tr,tc+s,tr+s-1,tc+s,s);} if(dr >= tr+s&&dc= tr+s &&dc>=tc+s) chessBoard(tr+s,tc+s,dr,dc,s); else { board[tr+s][tc+s]=t; chessBoard(tr+s,tc+s,tr+s,tc+s,s);} } main() { int i ,j; chessBoard(0,0,5,5,8); for(i=0;i <8;i++) { for( j=0;j <8;j++) { if(board[i][j]<10) printf(\ printf(\ printf(\ } printf( \} getchar(); }

算法设计与分析实验报告-棋盘覆盖问题

贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:算法设计与分析班级:信计101班姓名:张胜实验序号:一学号:1007010162实验日期:2013-9-30指导教师:程欣宇实验成绩:一、实验名称分治算法实验-棋盘覆盖问题二、实验目的及要求1、熟悉递归算法编写;2、理解分治算法的特点;3、掌握分治算法的基本结构
推荐度:
点击下载文档文档为doc格式
9oxh54w15u37lyd0yjbf83hrt8bf8q008r3
领取福利

微信扫码领取福利

微信扫码分享