算法设计与分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计与分析课程实验项目目录
学生姓名:学号:
*实验项目类型:演示性、验证性、综合性、设计性实验。
*此表由学生按顺序填写。
本科实验报告专用纸
课程名称算法设计与分析成绩评定
实验项目名称蛮力法指导教师
实验项目编号 201 实验项目类型设计实验地点机房
学生姓名学号
学院信息科学技术学院数学系信息与计算科学专业级
实验时间 2012年 3月 1 日~6月30日温度24℃
1.实验目的和要求:
熟悉蛮力法的设计思想。
2.实验原理和主要内容:
实验原理:蛮力法常直接基于问题的描述和所涉及的概念解决问题。
实验内容:以下题目任选其一
1).为蛮力字符串匹配写一段可视化程序。
2).写一个程序,实现凸包问题的蛮力算法。
3).最著名的算式谜题是由大名鼎鼎的英国谜人给出的: S END
+MORE MONEY
. 这
里有两个前提假设:第一,字母和十进制数字之间一一对应,也就是每个字母只代表一个数字,而且不同的字母代表不同的数字;第二,数字0不出现在任何数的最左边。求解一个字母算术意味着找到每个字母代表的是哪个数字。请注意,解可能并不是唯一的,不同人的解可能并不相同。
3.实验结果及分析:
(将程序和实验结果粘贴,程序能够注释清楚更好。)
本科实验报告专用纸(附页)
该算法程序代码如下:
#include "" #include ""
int main(int argc, char* argv[]) {
int x[100],y[100];
int a,b,c,i,j,k,l,m,n=0,p,t1[100],num; int xsat[100],ysat[100];
printf("请输入点的个数:\n"); scanf("%d",&num); getchar();
clock_t start,end; start=clock();
printf("请输入各点坐标:\n");
for(l=0;l 一批输入样本。 2).Tromino 谜题:Tromino 是一个由棋盘上的三个邻接方块组成的L 形瓦片。我们的问题是,如何用Tromino 覆盖一个缺少了一个方块(可以在棋盘上的任何位置),的22n n 棋盘。除了这个缺失的方块,Tromino 应该覆盖棋盘上的所有方块,而且不能有重叠。为此问题设计一个分治算法。 1. 实验结果及分析: (将程序和实验结果粘贴,程序能够注释清楚更好。) 本科实验报告专用纸(附页) 该算法程序代码如下: #include "" void swap(int *x,int *y) { int t;t=*x;*x=*y;*y=t; } int partition(int A[100],int l,int r) { int p,i,j; p=A[l]; i=l;j=r+1; do{ do{ i=i+1; if(i>j) break; }while(A[i] do{ j=j-1; if(j break; }while(A[j]>p); swap(&A[i],&A[j]); }while(i swap(&A[i],&A[j]);24℃用深度或广度优先查找,设计一个程序,对于一个给定的图,它能够输出每一个连通分量的顶点,并且能输出图的回路,或者返回一个消息表明图是无环的。 2).设计一个程序实现两种拓扑排序算法:DFS算法和减一算法并做 一个实验来比较它们的运行时间。 3).编写程序实现选择问题,即求一个n个数列表的第k个最小元素。 1.实验结果及分析: (将程序和实验结果粘贴,程序能够注释清楚更好。) 本科实验报告专用纸(附页) 算法程序代码如下: #include"" int main() {int QSort(int [],int,int); int a[11]; int k; printf("请输入一个11个数的数列:\n"); for(k=0;k<11;k++) scanf("%d",&a[k]); QSort(a,0,10); } int QSort(int a[],int left,int right) { int i,j,temp,m=6; i=left; j=right; temp=a[left]; if(left>right) return 0; while(i!=j) { while(a[j]>=temp && j>i) j--; if(j>i) a[i++]=a[j]; while(a[i]<=temp && j>i)i++; 本科实验报告专用纸(附页) if(j>i) a[j--]=a[i]; } a[i]=temp; if(i>m) QSort(a,left,i-1); 24℃24℃求总金额等于n的硬币的最少个数,并输出每种硬币的找零数量。要求测试数据:硬币面额{d1,d2,…,dm} ={1,5,10,21,25},找零金额n=273。 1.实验结果及分析: (将程序和实验结果粘贴,程序能够注释清楚更好。) 该算法程序如下: #include <> int main() { int d[3],i,n; int ZL(int [],int); printf("输入4种硬币面额:\n"); for(i=0;i<=3;i++) 本科实验报告专用纸(附页) {scanf("%d",&d[i]);} printf("输入要找零的金额:\n"); scanf("%d",&n); ZL(d,n); } int ZL(int d[],int n) { int a,b,c,k; a=n; for(k=3;k>=0;k--) { c=a/d[k]; b=a-c*d[k]; a=b; printf("面值为%d的找零个数为%d个\n",d[k],c); } } 程序运行结果如下: 2.教师评语、评分: