一:动态规划

1)动态规划的向前处理法

java中没有指针,所以邻接表的存储需要转化一中形式,用数组存储邻接表

用三个数组u,v,w存储边,u数组代表起点,v数组代表终点,w代表权值;例如:1-->2 权值为9 存为:u[i]=1,v[i]=2,w[i]=9,如果该边为第一条边则i=1;

 

 package dynamicProgramming;

 public class FGRAPH {

     public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
int first[],next[];
int n=12;
int m=21;
int[] u={0,1,1,1,1,2,2,2,3,3,4,5,5,6,6,7,7,8,8,9,10,11};
int[] v={0,2,3,4,5,6,7,8,6,7,8,7,8,9,10,9,10,10,11,12,12,12};
int[] w={0,9,7,3,2,4,2,1,2,7,11,11,8,6,5,4,3,5,6,4,2,5};
first=new int[n+2];
next=new int[m+1];
for(i=1;i<n+2;i++)
first[i]=-1;
for(i=1;i<m+1;i++){
next[i]=first[u[i]];
first[u[i]]=i;
System.out.println(i+" u,v,w: "+u[i]+" "+v[i]+" "+w[i]);
}
//遍历
int k;
int[] cost=new int[n+1];
int[] d=new int[n+1];
for(i=1;i<n+1;i++){
cost[i]=9999;
d[i]=-1;
}
cost[n]=0;
for(i=n-1;i>0;i--){
k=first[i];
while(k!=-1){
//System.out.println(u[k]+" "+v[k]+" "+w[k]);
if(w[k]+cost[v[k]]<cost[u[k]]){
cost[u[k]]=w[k]+cost[v[k]];
d[u[k]]=v[k];
}
k=next[k];
}
}
i=1;
System.out.println();
System.out.print("1");
while(d[i]!=-1){
System.out.print("->"+d[i]);
d[i]=d[d[i]];
}
System.out.println(" cost[1]:"+cost[1]);
} }

2)动态规划的向后处理法

 package dynamicProgramming;

 public class BGRAPH {

     public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
int first[],next[];
int n=12;
int m=21;
int[] u={0,1,1,1,1,2,2,2,3,3,4,5,5,6,6,7,7,8,8,9,10,11};
int[] v={0,2,3,4,5,6,7,8,6,7,8,7,8,9,10,9,10,10,11,12,12,12};
int[] w={0,9,7,3,2,4,2,1,2,7,11,11,8,6,5,4,3,5,6,4,2,5};
first=new int[n+1];
next=new int[m+1];
for(i=1;i<n+1;i++)
first[i]=-1;
for(i=1;i<m+1;i++){
next[i]=first[u[i]];
first[u[i]]=i;
System.out.println(i+" u,v,w: "+u[i]+" "+v[i]+" "+w[i]);
}
//遍历
int k;
int[] cost=new int[n+1];
int[] d=new int[n+1];
for(i=1;i<n+1;i++){
cost[i]=9999;
d[i]=-1;
}
cost[1]=0;
for(i=1;i<n+1;i++){
k=first[i];
while(k!=-1){
if(w[k]+cost[u[k]]<cost[v[k]]){
cost[v[k]]=w[k]+cost[u[k]];
d[v[k]]=u[k];
}
k=next[k];
}
}
i=12;
System.out.println();
System.out.print("12");
while(d[i]!=-1){
System.out.print(" <-- "+d[i]);
d[i]=d[d[i]];
}
System.out.println(" cost[1]:"+cost[12]);
} }

最新文章

  1. Spring Boot快速开发Web项目
  2. Linux下查看用户列表
  3. 判断JS对象是否拥有某属性的方法举例
  4. (转载)github简单使用教程
  5. treeview右键添加新节点
  6. SQL中on条件与where条件的区别(转载)
  7. BibTex (.bib) 文件的凝视
  8. Anaconda安装第三方包(whl文件)
  9. MT8127:改变安卓系统权限问题
  10. eclipse导出可供项目引用的jar
  11. nlp L1
  12. BZOJ3577:玩手机(最大流,二维ST表)
  13. Uva LV 2995 Image Is Everything 模拟,坐标映射,视图映射 难度: 1
  14. 关于C# WinForm中进度条的实现方法
  15. 为什么学习linux
  16. JDK提供的四种线程池代码详解
  17. Socket编程基础篇
  18. 获取分组后统计数量最多的纪录;limit用法;sql执行顺序
  19. SpringBoot日记——Thymeleaf进阶小篇
  20. JAVA 多线程机制(一)

热门文章

  1. mysql根据汉字首字母排序[转]
  2. python_virtualenvwrapper安装与使用
  3. 04_Javascript初步第二天(下)
  4. redis键操作
  5. SQL语句-SELECT语句
  6. Part 4:表单和类视图--Django从入门到精通系列教程
  7. disptch_after 自递归
  8. Designing Data-Intensive Applications
  9. 豆瓣爬虫小记(lowB版)
  10. 安装RRDtool 1.4.5