罗马尼亚度假问题.doc
《罗马尼亚度假问题.doc》由会员分享,可在线阅读,更多相关《罗马尼亚度假问题.doc(15页珍藏版)》请在三一文库上搜索。
1、二.详细代码 测试类:/*Main类,打印各个算法的结果* author dyl*/classMainint result;int xiabiaoIZ二nu 11;/访问的 卜标publicstaticvoid main1String., args 1Graph graph=newGraph();System, out. printin1罗马尼亚问题“);System, out. printin 1、深度优先搜索);DFS dfs=new DFS ();dfs DF_Search1 graph, 0, 12丿;System, out. printin(2、迭代加深的搜索);IDS ids二ne
2、w IDS();ids. IDS_Search1 graph, 0, 12, 15 1深度设 15System, out. printin (3、一致代价搜索);UCS ucs=new UCS1 graph, 0, 121;System, out. printin(4、A*搜索);AXing aXing=newAXing1 :,;aXing. A_Search (graph, graph. H, 0. 15 * : /0-15 即 Arad 到达 Hirsova /*打印* param g:图* param stack:栈*/publicvoid show Graph g,Stack stac
3、kif1 stack, size 1 )=0 1System, out. printin路径搜索失败);return;result=0:System, out. print C访问的下标: “);for int i 二0; istack size1); i+)System. out print一一,z+stack. get1 i 0:/*第一个孩子* param g* param start* return T表示一个孩子都没有*/publicint getFirstVex int start1ifstart =0&start path length丨for int j 二0; j path
4、length; j+)if1 path start jj 10000&path start I j O J 关系return j:return-1;/*下一个孩子* param start* param w* return表示图G中顶点i的第j个邻接顶点的下一个邻接顶点*返回-1,表示后面没有邻接点了*/publicint getNextVex int start, int wif1 start/=0&start path length&二0&wpath length】for int i 二 w+1: ipath.1ength; i+)if1 path startl il 10000&path
5、startli0)return i;return-1;publicint getNumber11return path, length;I【深度优先】基本原理:深度优先搜索采用堆栈寻找路径,首先从Aad结点岀发,判断是否为目标结点, 若否,寻找与该结点的邻接点,先搜索一条分支上的所有节点,然后再去搜索和Arad的苴 它分支结点,找岀并存进待扩展结点表,等待扩展,每次先判断待扩展结点表是否为空,若 否,则从待扩展结点表中取出一个结点进行扩展,并将扩展后的结点存进该表,若是,则 返回失败。深度优先搜索类:/*深度优先搜索类* author dyl*/publicclass DFSStack sta
6、ckz:newStack ():int x;int w: vO的第-个邻接点/*深度优先搜索一非递归式* param g :图* param vO:开始节点* param vg:最终节点*/publicvoid DF_Search1 Graph g, int vO, int vg stack push (vO) ; /入栈g. mark IvO=l;. vO 被访问while truex= (Integer) stack, peek (); /査看栈顶 t 素w=g. getFirstVex1 x ;while (g. markw=1) 戮访问,则寻找下-个邻接点w=g getNextVex1
7、x, w ;if (w=T) break;wh订e (W1) /没冇找到下一个邻接点stack, pop);x=1 Integer :1 stack peek 0 ;w=g. getFirstVex x ;while g. mark_w_lw=g getNextVex-x, w ;if (w=T) break;stack. push1w);g. mark _w_ 二 1;if (w=vg) break;到达终点newMain 0 show g, stack);实验结果:terminatedMain (l)卩负 AppiicotoM EV皿、jdkArdjreWubinEeM (2015-4-1
8、4 罗B尼亚冋J8l 先搜萦访问的下示: -0- 1-2-4-6-10-11- -12访祠过程:-Arad-Zeri(Mi-Oradea-Sibiu-Rininicu Vilcea-Craiova-Pitesti-Bucharest总长度为:762实验分析: 根据结果可只知,在有限状态空间下,树搜索不是完备的,图搜索完备:无限状态下不完备。此结果0-1-2-4-6-10-11-12只是其中一条,但不是最优解。分支因子b,深度do则最坏情况下时间复杂度也髙达,空间复杂度,存需求少。I【迭代加深】基本原理:迭代加深搜索是以DFS为基础的,它限制DFS递归的层数。迭代加深搜索的基本步骤是:1、设置一
9、个固立的深度depth.通常是depth = 1,即只搜索初始状态2、DFS进行搜索,限制层数为depth,如果找到答案,则结束,如果没有找到答案则继续 下一步3、如果DFS途中遇到过更深的层,则+depth,并重复2;如果没有遇到,说明搜索已 经结束,没有答案/*迭代加深* author dyl*/publicclass IDSStack stack=newStack Integer();/*迭代加深搜索* param g:图* param vO:开始节点* param vg: 口的节点* param depthMax: depthMax*/publicvoid IDS_Search1 Gr
10、aph g, int vO, int vg, int depthMaxfor int i 二2; i 二depthMax; i+) /迭代 depthMax 次if1 dfsearch1 g, vO, vg, i =1break;/材深度搜索* param g:图* param vO:开始节点* param vg: H 的节点* param depthMax: depthMax* return*/publicint dfsearch1 Graph g, int vO, int vg, int depthMax1 int x;int w: zvO的第-个邻接点stack push1 vO ; /
11、At戈g. mark IvO=l; / vO 被访问while truex=(Integer) stack, peek (); /查看栈顶元素w=g. getFirstVex x ;while (g. mark=l) /被访问,则:j1找 I、- 个w=g getNextVex1x, w :if (w=-l) break;while(w1) /没有找到下一个邻接点stack. pop ();if (stack, size ()=0) /清空了栈里的元素g. marklnit; . 7访问初始化returnO:x=1 Integer1 stack peek1);w=g.getFirstVex x
12、 ;while g. ma:rk_w_=lw=g. getNextVex1x, w :if (w=-l) break;stack push(w);g.二 1;if iw二二vg1break; 检查是否达到终点if (stack, size ()二depthMax) /重新迭代则重新初始化值 stack. pop1);newMain1) show g, stack1 ; returnl;实验结果:2、迭代加深的搜索访问过程:-Arad-Zerind-Ora(iea-$ibiu-Fagaras-Bucharest狀度为:607lUirnSINET实验分析:因为迭代加深是从按照深度的递增搜索的,所以
13、说0-1-2-4-7-12这条路 径,只是在深度最低的情况下找到的结果,并不是最优解。是完备的,时间复杂度也髙达, 空间复杂度。I【一致代价】基本原理:扩展的是路径消耗g(n)最小的节点n,用优先队列来实现,对解的路径步数不关心,只关心 路径总代价。即使找到目标节点也不会结束,而是再检查新路径是不是要比老路径好,确实 好,则丢弃老路径。* 一致代价类*/publicclass UCS public UCS1 Graph g, int start, int end*int pre二newint 20;, /保存各个结点的前驱结点int: dist =newint20J;/用于保X前结点到起始纟吉
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 罗马尼亚 度假 问题
链接地址:https://www.31doc.com/p-13730722.html