1、算法设计与分析上机指导算法设计与分析上机指导(05软工)上机常见错误与对策1上机指导1 2上机指导2 5上机指导3 8计算机与信息学院 温敬和wenjinghe上机常见错误与对策创建工程时,选错工程类型(应选择倒数第三个“Win32 Console Application”);创建源程序文件时,选错文件类型。要修改程序,应打开工作区(dsw)文件,而不是源程序(cpp)文件。在VC+系统中,程序是用西文字符(ASCII码)来描述的,汉字只能出现在字符串常数或注释中。 请注意汉字双引号和西文双引号的区别 请注意汉字单引号和西文单引号的区别 请注意汉字分号和西文分号的区别 请注意汉字园括号和西文园
2、括号的区别在一般情况下,一个工作区只有一个工程,一个工程对应一个程序。当一个程序完成,编制下一个程序时,一定要新建工程(不要修改系统默认设置“创建新工作区”)。最简单的方法是:退出VC+集成环境后,重新进入VC+。当系统出现不可解释的现象时,此时应选择“编译”“重建全部”,然后执行。若还不行,则重新启动计算机,利用硬盘保护卡功能恢复系统。操作步骤: 重新启动计算机后,出现菜单画面。 选中“Windows 2000 Professional”。 在按住“Ctrl”键的同时,按“R”健。 对于系统提问,按“Y”键回答。源程序若有错误,编译系统会在输出区显示错误信息。由于识别错误能力有限,指示的错误
3、信息有时不一定完全正确,但至少提供了线索。双击错误信息条目,指针会自动指向出错语句,编程者可逐字符查找错误。算法设计与分析上机指导1(每个)程序书写要求/ */ * 工 程 名:103.dsp */ * 程 序 名:103.cpp */ * 主要功能:自底向上合并排序法 */ * 学号姓名:57053001温敬和 */ * 编制时间:2007年7月13日 */ *#include /#include void main() /using namespace std; /int main() / / / return 0; /实习内容习题一(工程名为101、源程序名为101)选择排序法的伪代码描
4、述如下:算法1.4 SelectionSort(参见Page 8)输入:数组A1.n输出:按升序排列的数组A1.n1. for i1 to n-12. Selection(i) 3. end for 过程Selection(i)1. ki2. for ji+1 to n3. if Aj0) and (Ajx)4. Aj+1Aj 5. jj-16. end while 7. Aj+1x用C语言实现上述算法并上机通过。选做题:用递归方法(归纳法)实现插入排序法。习题三(工程名为103、源程序名为103)自底向上合并排序法的伪代码描述如下:算法1.6 BottomUpSort(Page 10)输入:
5、n个元素的数组A1.n输出:按升序排列的数组A1.n1. t12. while tn3. st : t2s : i04. while i+tn5. Merge(A,i+1,i+s,i+t) /Merge(A,p,q,r)6. ii+t7. end while8. if i+ss表示剩余的元素个数大于被合并的子序列长度过程Merge(A1.m,p,q,r)1. comment:Bp.r是个辅助数组 /或B1.m2. sp : tq+1 : kp /s和t分别指向数组A二个子数组元素3. while (sq) and (tr) /k指向数组B当前空白元素位置4. if AsAt then BkAs
6、 : ss+15. else BkAt : tt+16. end if7. kk+1 /指向数组B下一个空白位置8. end while9. if s=q+1 then Bk.rAt.r /说明子数组Ap.q元素已处理完10. else Bk.rAs.q /否则t=r+1,说明子数组Aq+1.r已处理完。11. end if12. Ap.r Bp.r用C语言实现上述算法并上机通过。选做题:用递归方法(分治法)实现自底向上合并排序法。提交方式 首先建立个人目录,目录名为“学号姓名”,例 “57053001温敬和”。在目录“57053001温敬和”中,建立子目录 1(本次实习)。在目录“57053
7、001温敬和1”中,应具有如下文件: 101.cpp、101.exe、102.cpp、102.exe、103.cpp、103.exe算法设计与分析上机指导2(每个)程序书写要求/ */ * 工 程 名:103.dsp */ * 程 序 名:103.cpp */ * 主要功能:自底向上合并排序法 */ * 学号姓名:57053001温敬和 */ * 编制时间:2007年7月13日 */ *#include /#include void main() /using namespace std; /int main() / / / return 0; /实习内容习题一(工程名为201、源程序名为20
8、1)快速排序法的伪代码描述如下:算法6.6 QuickSort(参见Page 114)输入:有n个元素的数组A1.n输出:按升序排列的数组A1.n 1. QuickSort(A,1,n)过程QuickSort(A1.n,low,high)1. if lowx=Alow5. ii+16. if ij then 互换Ai和Aj7. end if8. end for9. if lowi then 互换Alow和Ai10. wi11. return w用C语言实现上述算法并上机通过。习题二(工程名为202、源程序名为202)解最长公共子序列问题的伪代码描述如下:算法 LCSRec(递归算法)输入:字符
9、串A和B,设A和B的长度分别为n和m。输出:A和B的最长公共子序列的长度 1. LCSRec(n,m)过程procedure LCSRec(i,j)1. if i=0 or j=0 then return 02. else3. if Ai=Bj then4. return LCSRec(i-1,j-1)+15. else6. return max(LCSRec(i,j-1),LCSRec(i-1,j)7. end if8. end if用C语言实现上述算法并上机通过。选做题:给出最长公共子序列问题的非递归算法(动态规划法),并上机通过。习题三(工程名为203、源程序名为203)解背包问题的伪代
10、码描述如下:算法7.4 Knapsack(参见Page 139)输入:背包容量C、物品体积集合 S = s1,s2,.,sn、物品价值集合V = v1,v2,.,vn输出:可装入背包物品的最大总价值1. for i0 to n Vi,00 /背包容量为02. for j0 to C V0,j0 /背包未装入任何物品3. for i1 to n4. for j1 to C5. if si j then /物品ui的体积si超过容量j,不装入。6. Vi,jVi-1,j /取上一次的计算结果7. else /物品ui的体积si不超过容量j,可装入。8. Vi,jmax(Vi-1,j,Vi-1,j-
11、si+vi)9. end if10. end for11. end for12. return Vn,C /返回最大总价值用C语言实现上述算法并上机通过。选做题1:如何修改算法Knapsack,使它只需要(C)空间,其中C是背包容量。选做题2:给出背包问题的非递归算法,并上机通过。提交方式 首先建立个人目录,目录名为“学号姓名”,例 “57053001温敬和”。在目录“57053001温敬和”中,建立子目录2(本次实习)。在目录“57053001温敬和2”中,应具有如下文件: 201.cpp、201.exe、202.cpp、202.exe、203.cpp、203.exe算法设计与分析上机指导3
12、(每个)程序书写要求/ */ * 工 程 名:103.dsp */ * 程 序 名:103.cpp */ * 主要功能:自底向上合并排序法 */ * 学号姓名:57053001温敬和 */ * 编制时间:2007年7月13日 */ *#include /#include void main() /using namespace std; /int main() / / / return 0; /实习内容习题一(工程名为301、源程序名为301)解最短路径问题的伪代码描述如下:算法 8.1(Page 147)输入:含权有向图G=(V,E)的邻接矩阵,约定结点1为源。输出:G中结点1到其它各结点的
13、最短路径长度1. X=1:Y=V-1:1=02. for y2 to n3. if y相邻于顶点1 then y=length1,y4. else y=5. end if6. end for7. for j1 to n-1 /Y中共有n-1个顶点8. 设yY且y为最小9. XXy:YY-y /将结点y由集合X移入集合Y10. for 每条边(y,w) 11. if wY and y+lenghy,ww then12. wy+lenghy,w13. end if14. end for15. end for用C语言实现上述算法并上机通过。习题二(工程名为302、源程序名为302)解图三着色问题的伪
14、代码描述如下:输入:无向图G=(V,E)输出:图的结点3着色向量c1.n,0cj 3(1jn)。1c1.n0 /c1.n为全局量2GraphColorRec(1) 过程GraphColorRec(k)1. for color1 to 32. ckcolor3. if c1.k为合法着色 then /部分解或解4. if kn then /部分解5. GraphColorRec(k+1) /进入下一个结点6. else /是解7. output c1.n and exit8. end if9. end if10. end for11. ck=0 /回溯前清0,即没有着任何颜色。用C语言实现上述算
15、法并上机通过。选做题1:给出图三着色问题的全部解。选做题2:给出图三着色问题的非递归算法,并上机通过。习题三(工程名为303、源程序名为303)解4皇后问题的伪代码描述如下:算法 4-QueenRec(递归解)输入:空输出:对应于4皇后问题的向量c1.4(全局量) 1. c1.40 2. advanced(1)过程advanced(k)1. for col1 to 4 /最多只有4列2. ckcol 3. if c是解 then /部分解或解 4. if k=4 then /解5. output c and exit 6. else /部分解 7. advanced(k+1) /移至下一行8. end if 9. end if 10. end for11. ck0 /返回前清0(回溯) 选做题1:给出4皇后问题的全部解。选做题2:给出4皇后问题的非递归算法,并上机通过。提交方式 首先建立个人目录,目录名为“学号姓名”,例 “57053001温敬和”。在目录“57053001温敬和”中,建立子目录3(本次实习)。在目录“57053001温敬和3”中,应具有如下文件: 301.cpp、301.exe、302.cpp、302.exe、303.cpp、303.exe
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1