棋盘覆盖算法c语言实验报告,算法设计与分析实验报告-棋盘覆盖问题.doc

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

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

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

课程名称:算法设计与分析班级:信计101班实验日期:2013-9-30姓名: 张 胜学号:1007010162指导教师:程欣宇实验序号:一实验成绩:一、实验名称

分治算法实验 - 棋盘覆盖问题二、实验目的及要求

1、熟悉递归算法编写;

2、理解分治算法的特点;

3、掌握分治算法的基本结构。三、实验环境

Visual C++ 四、实验内容

根据教材上分析的棋盘覆盖问题的求解思路,进行验证性实验;

要求完成棋盘覆盖问题的输入、分治求解、输出。有余力的同学尝试消去递归求解。五、算法描述及实验步骤

分治算法原理:

分治算法将大的分解成形状结构相同的子问题,并且不断递归地分解,直到子问题规模小到可以直接求解。

棋盘覆盖问题描述:

在一个2k x 2k个方格组成的棋盘中恰有一个方格与其他的不同称为特殊方格,想要求利用四种L型骨牌(每个骨牌可覆盖三个方格)不相互重叠覆盖的将除了特殊方格外的其他方格覆盖。

调试过程及实验结果

实验运行结果:

七、总结

通过本次实验,我更深的理解了递归和分治策略。代码是书上的算法,加上主函数就行了,用的是C语言编写,很长时间没用了,感觉有点生疏。实验结果有点问题,就是覆盖棋盘时,并不是按照1,2,3….的字符顺序,而是按照很乱的顺序输出字符,这个我不知道怎么解决,就没解决。八、附录

#include "stdio.h"

#include "conio.h"

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

chessBoard(tr,tc,dr,dc,s);

else {

board[tr+s-1][tc+s-1]=t;

chessBoard(tr,tc,tr+s-1,tc+s-1,s);}

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

chessBoard(tr+s,tc,dr, dc,s);

else {

board[tr+s][tc+s-1]=t;

chessBoard(tr+s,tc,tr+s,tc+s-1,s);}

if(dr >= tr+s &&dc>=tc+s)

chessBoard(tr+s,tc+s,dr,dc,s);

else {

b

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值