分支限界法最大团问题和旅行背包问题java源程序.docx
- 文档编号:8193459
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:13
- 大小:36.55KB
分支限界法最大团问题和旅行背包问题java源程序.docx
《分支限界法最大团问题和旅行背包问题java源程序.docx》由会员分享,可在线阅读,更多相关《分支限界法最大团问题和旅行背包问题java源程序.docx(13页珍藏版)》请在冰豆网上搜索。
分支限界法最大团问题和旅行背包问题java源程序
实验报告14
课程数据结构与算法实验名称分支限界法第页
班级11计本学号105032011130姓名风律澈
实验日期:
2013年6月8日报告退发(订正、重做)
一、实验目的
掌握分支限界法的原理和应用。
二、实验环境
1、微型计算机一台
2、WINDOWS操作系统,JavaSDK,Eclipse开发环境
三、实验内容
必做题:
1、编写程序,采用问题。
2、编写程序,采用分支限界法求解旅行售货员问题。
四、实验步骤和结果
(附上代码和程序运行结果截图)
1、分支限界法最大团
package分支限界最大团;
publicclassmain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
int[][]a={
{1,1,0,1,1},
{1,1,1,0,1},
{0,1,1,0,1},
{1,0,0,1,1},
{1,1,1,1,1}
};
graphg=newgraph(a);
g.find_answer();
g.show();
}
}
----------------------------------------------------------------------------------------------------------------------
package分支限界最大团;
importjava.util.ArrayList;
importjava.util.PriorityQueue;
publicclassgraph{
privateArrayList
privateArrayList
publicgraph(int[][]a){
this.points=newArrayList<>();
this.answer_point=newArrayList<>();
intn=a.length;
for(inti=0;i this.points.add(newpoint()); for(inti=0;i for(intj=i+1;j if(a[i][j]==1){ pointpi=this.points.get(i); pointpj=this.points.get(j); pi.add_nearpoint(pj); pj.add_nearpoint(pi); } } publicvoidfind_answer(){ //TODOAuto-generatedmethodstub inttotal_points=this.points.size(); PriorityQueue intnode_in=0; pointnode_point=this.points.get(0); ArrayList intmaxnum_point=this.points.size(); Nodestartnode=newNode(node_in,node_point,nowanswer,maxnum_point); enode.offer(startnode); Nodenode=null; while(true){ if(enode.isEmpty()) break; node=enode.poll(); if(node.get_node_in()==maxnum_point) break; if(node.ifleft()){ intnew_node_in=node.get_node_in()+1; intnew_answer=node.get_maxnum_point(); pointnewpoint; if(new_node_in==total_points) newpoint=null; else newpoint=this.points.get(new_node_in); ArrayList new_answer_point.add(node.get_node_point()); Nodenew_node=newNode(new_node_in,newpoint,new_answer_point,new_answer); enode.offer(new_node); if(new_node.get_answer_point().size()>this.answer_point.size()) this.answer_point=newArrayList<>(new_node.get_answer_point()); } if(node.ifright(this.points.size(),this.answer_point.size())){ ArrayList intnew_node_in=node.get_node_in()+1; intnew_node_max=node.get_maxnum_point()-1; pointp=this.points.get(new_node_in); Nodenewnode=newNode(new_node_in,p,new_node_answer_points,new_node_max); enode.add(newnode); } } } publicvoidshow(){ System.out.println(this.answer_point); } } ---------------------------------------------------------------------------------------------------------------------- package分支限界最大团; importjava.util.ArrayList; publicclasspoint{ privatestaticintids=1; privateintid; privateArrayList publicpoint(){ super(); this.id=ids++; this.nearpoints=newArrayList } publicStringtoString(){ return"顶点"+this.id; } publicvoidadd_nearpoint(pointp){ this.nearpoints.add(p); } publicbooleancheck_if_nearpoint(pointp){ returnthis.nearpoints.contains(p); } } ---------------------------------------------------------------------------------------------------------------------- package分支限界最大团; importjava.util.ArrayList; publicclassNodeimplementsComparable privateintnode_in; privatepointnode_point; privateArrayList privateintmaxnum_point; publicNode(intn,pointp,ArrayList super(); this.node_in=n; this.node_point=p; this.answer_points=a; this.maxnum_point=m; } publicintcompareTo(Nodeo){ //TODOAuto-generatedmethodstub if(this.maxnum_point>o.maxnum_point)return-1; if(this.maxnum_point return0; } publicintget_node_in(){returnthis.node_in;} publicArrayList publicbooleanifleft(){ for(pointp: this.answer_points) if(! p.check_if_nearpoint(this.node_point)) returnfalse; returntrue; } publicbooleanifright(inttotal_point,intnowanswer){ intleftpoint=total_point-this.node_in; if(this.answer_points.size()+leftpoint>nowanswer) returntrue; returnfalse; } publicintget_maxnum_point(){returnthis.maxnum_point;} publicpointget_node_point(){returnthis.node_point;} } ----------------------------------------------------------------------- 2、分支限界法求旅行售货员 package旅行售货员问题; publicclassmain{ /** *@paramargs */ publicstaticvoidmain(String[]args){ int[][]a={ {0,30,6,4}, {30,0,5,10}, {6,5,0,20}, {4,10,20,0}, }; graphg=newgraph(a); g.findanswer(); g.show(); } } ------------------------------------------------------------------------------- package旅行售货员问题; importjava.util.ArrayList; importjava.util.Collections; importjava.util.PriorityQueue; publicclassgraph{ privateArrayList privateint[][]a; privateArrayList privateintanswerpathlong; publicgraph(int[][]b){ this.points=newArrayList<>(); intn=b.length; for(inti=0;i this.points.add(newpoint()); this.a=b; this.answerpathlong=Integer.MAX_VALUE; this.answer_points=null; this.set_point_short_long(); } publicintget_value(pointpx,pointpy){ intp1id=px.getid(); intp2id=py.getid(); returnthis.a[p1id][p2id]; } publicvoidfindanswer(){ PriorityQueue ArrayList introot_answer=0; for(pointp: this.points) root_answer+=p.getshortestlong(); introot_in=0; introot_path_long=0; Noderoot_node=newNode(root_in,root_list,root_path_long,root_answer); enode.offer(root_node); while(true){ if(enode.isEmpty())break; Nodeold_node=enode.poll(); inttotal_point=this.points.size(); if(old_node.if_end(total_point)){ this.answer_points=newArrayList<>(old_node.get_now_sort()); this.answerpathlong=old_node.get_now_path_long(); break; } if(old_node.if_end_father(total_point)){ intnew_node_in=old_node.get_node_in()+1; ArrayList pointold_point_node=old_node.get_node_point(); pointnew_point_node=new_node_set.get(new_node_in); pointstartpoint=this.points.get(0); intnew_node_nowpath=old_node.get_now_path_long()+this.get_value(old_point_node,new_point_node)+this.get_value(new_point_node,startpoint); intmaybe_the_best=new_node_nowpath; Nodenew_node=newNode(new_node_in,new_node_set,new_node_nowpath,maybe_the_best); if(new_node.get_now_path_long() this.answerpathlong=new_node.get_now_path_long(); enode.offer(new_node); } continue; } for(inti=old_node.get_node_in()+1;i if(old_node.if_in_i(i,this.a,this.answerpathlong)){ intnew_node_in=old_node.get_node_in()+1; ArrayList intj=new_node_in; this.changeij(newnode_nowset,i,j); pointold_node_to_point=old_node.get_node_point(); pointnew_node_to_point=newnode_nowset.get(new_node_in); intnew_maybe_the_best=old_node.get_node_answer()+this.get_value(old_node_to_point,new_node_to_point)-old_node_to_point.getshortestlong(); intnew_node_path_long=old_node.get_now_path_long()+this.get_value(old_node_to_point,new_node_to_point); Nodenew_node=newNode(new_node_in,newnode_nowset,new_node_path_long,new_maybe_the_best); enode.offer(new_node); } } } } privatevoidchangeij(ArrayList //TODOAuto-generatedmethodstub Collections.swap(points,i,j); } publicvoidshow(){ System.out.println(this.answer_points); System.out.println("最优路径长度为: "+this.answerpathlong); } privatevoidset_point_short_long(){ pointp; int[]value; for(inti=0;i p=this.points.get(i); value=this.a[i]; for(intx: value){ if(x==0)continue; if(x } } } } ------------------------------------------------------------------------------- package旅行售货员问题; publicclasspoint{ privatestaticintids=0; privateintid; privateintshortestlong; publicpoint(){ super(); this.id=point.ids++; this.shortestlong=Integer.MAX_VALUE; } publicintgetid(){ returnid; } @Override publicStringtoString(){ return"顶点: "+this.id+";"; } publicintgetshortestlong(){ returnshortestlong; } publicvoidsetshortestlong(ints){ this.shortestlong=s; } } ------------------------------------------------------------------------------- package旅行售货员问题; importjava.util.ArrayList; publicclassNodeimplementsComparable privateintnode_in; privatepointnode_point; privateArrayList privateintnow_path_long; privateintnode_answer; publicNode(intin,ArrayList super(); this.node_in=in; this.now_sort=set; this.now_path_long=p_l; this.node_answer=n_a; this.node_point=this.now_sort.get(in); } publicbooleanif_in_i(inti,int[][]a,intnow_long){ pointnow_point=now_sort.get(node_in); pointpointi=now_sort.get(i); intnow_id=now_point.getid(); intpointi_id=pointi.get
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分支 限界 大团 问题 旅行 背包 java 源程序