算法设计与分析实验报告

专业

班级

姓名

学号

实验名称

实验四:回溯与分支限界算法设计

实验目的

掌握回溯法解决问题的一般步骤。

学会使用回溯法解决实际问题。

掌握分支限界法解决问题的基本思想。

学会使用分支限界法解决实际问题。

骑士游历问题(采用回溯法):

在国际象棋的棋盘(8行X 8列)上放置一个马,按照“马走 日字”的规则,马要遍历棋盘,即到达棋盘上的每一格,并 且每格只到达一次。若给定起始位置(x0,y0),编程探索出一 条路径,沿着这条路径马能遍历棋盘上的所有单元格。

2.行列变换问题(采用分支限界法):

实验内容给定两个m n方格阵列组成的图形 A和图形B,每个方格的 颜色为黑色或白色,如下图所示。行列变换问题的每一步变 换可以交换任意2行或2列方格的颜色,或者将某行或某列颠 倒。上述每次变换算作一步。试设计一个算法,计算最少需 要多少步,才能将图形A变换为图形B。

实验内容

图形A图形B

图形A

1.骑士游历问题的解题思路或算法思想:

如果在每步选择方向时,不是任意选择一个方向,而是经过

一定的测试和计算,“预见”每条路的“宽窄”,再选择一

条最“窄”的路先走,成功的可能性较大。理由是先走“困

难的路”,光明大道留在后面。因为每一格迟早都要走到,

与其把困难留在后面,不如先走“困难的路”,这样路就会

越走越宽,成功的机会就越大。这种方法称为预见算法。

算法描述

为母个力|口」测定一个值可通路数,仑表小该位直上还有

多少条通路。在每一格上对8个方向都进行试探,并分析比

较,下一步应该选择可通路数值最小的方向走。

2.行列变换问题的解题思路或算法思想:

先进先出队列式分支限界法

输入数据,将计算出的最少变换次数和相应的变换序列输出。」

第1行是最少变换次数。从第2行开始,每行用4个数表小

一次变换。

程序及运行结果

1.骑士游历问题的程序:

package ;

import

public class Qishi (

private boolean Travel(int firstX, int firstY, int皿 board) (

ength; j++) {

if (board[i]田 < 10) {

""+ board[i][j]);

} else {

}

"");

}

}

}

实例:

输入起始点(。-7);

游历完成;

41

14

43

46

25

16

27

2

44

5S

49

3S

1

24

17

13

42

45

58

47

26

3

28

63

54

39

37

10

23

53

12

57

43

59

21

29

4

G4

g

62

51

36

49

32

19

11

52

7

66

21

34

5

30

8

61

19

3S

6

31

20

33

2.行列变换问题的程序:

package ;

import graph(

static int sour, dest;//sour是图形的初始整数,dest是图形的目的整 数

static int ans[]=new int[1<<16];//静态变量(即全局变量),用于存 放图形变换的路径

int m=4,n=4,x;

int row[]=new int[4];

int col[]=new int[4];

void setx(int x)(

=x;

}

int getx()(

return ;

}

void rowx()(//将一个整数划分成四行二进制

int y;

for(int i=0;i

y=1;

row[i]=0;

for(int j=0;j

if((x&1)!=0) //如果x的最低位是1

row[i]|=y;

y<<=1;

x>>=1;

}

}

}

void colx(){//将一个整数划分成四列二进制

int y;

for(int j=0;j

y=1;

for(int i=0;i

for(int j=0;j

if((x&1)!=0) //如果x的最低位是1

col[j]|=y;

x>>=1;

}

y<<=1;

}

}

void rowy()(//将四行二进制转换成一个整数

int z=1, x=0, y;

for(int i=0;i

y=row[i];

for(int j=0;j

if((y&1)!=0) //如果y的最低位是1 x|=z;

z<<=1;

y>>=1;

}

}

=x;

}

void coly(){//将四列二进制转换成一个整数

int z=1, x=0,-y;

for(int i=0;i

for(int j=0;j

if((col[j]&1)!=

回溯与分支限界算法c语言,回溯与分支限界算法设计.docx相关推荐

  1. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  2. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  3. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  4. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  5. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  6. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

  7. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  8. 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

    数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...

  9. 人工免疫算法c语言程序,基于人工免疫算法的模拟电路故障诊断

    摘要: 模拟电路故障诊断一直以来都是十分必要和有意义的,目前已成为热门的研究课题.现代电子技术和计算机技术的迅速发展促进了片上系统和混合集成电路的大量涌现,这也对模拟电路的测试和故障诊断提出了更高的要 ...

  10. JAVA梅森旋转随机算法,C语言实现梅森旋转算法

    原理: 梅森旋转算法是一种伪随机数生成算法 1.定义相关宏和结构体 #include #include #include #include typedef unsigned int uint; #de ...

最新文章

  1. 机器学习(14)逻辑回归(理论)
  2. 《UNIX高级环境编程》 -- apue.h
  3. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解
  4. oracle索引未使用,oracle
  5. Myeclipse开发内存溢出问题
  6. 开发人员职位:对编程语言Python的需求明显下降
  7. 洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes
  8. 开源一站式移动应用生成平台Jingub系列(0):背景资料介绍
  9. 微信小程序中处理 获取用户地址的回调
  10. Unity UGUI实现鼠标拖动图片
  11. ad用户和计算机无法启动,windows 2008AD计算机启动脚本无法执行
  12. 10 tf.data模块
  13. 神舟战神怎么装win11系统
  14. linux内核奇遇记之md源代码解读之三
  15. 中华黑豹计算机病毒,关于“中华黑豹病毒”
  16. 如何删除WORD中的空白行以及换行符
  17. 超过2t硬盘分区_超过2T和3T及以上硬盘的MBR与GPT分区形式
  18. web前端三大主流框架是什么?
  19. 《Java并发编程实战》【第一部分 基础知识】
  20. 在IntelliJ IDEA中,开发一个摸鱼看书插件

热门文章

  1. c语言int的2 32,c语言中int(2byte)的表示范围是为什么是-32768~32767!
  2. 博途PLC 1200/1500PLC轴控功能块Servo_Axis(PN总线轴)
  3. postman测试下载的接口
  4. 甘肃省兰州市谷歌卫星地图下载
  5. office365有必要值得买吗?office365家庭版和个人版区别解析
  6. 计算机C语言乒乓球,C语言乒乓球游戏源码.pdf
  7. 亿万富翁Calvin Ayre梭哈BCH!
  8. LG P990 (LG Optimus擎天柱2X) 获得Root权限的方法
  9. DS_2010_选择
  10. 异度之刃 Xenoblade 后感