Dijkstra——Java实现
2016-06-23 16:39
246 查看
dijkstra算法是求最短路径的经典算法,只求无负权路径,属于贪心策略,贪最短路径。本人郑重声明:算法是来自《算法导论》,代码是自己写的,有的地方处理的不好,但可以实现,本人用的是eclipse。
public class Dijkstra { private static int x=1111111; public static void main(String args[]){ int[][] Matrix={ {x,10,3,x,x}, {x,x,1,2,x}, {x,4,x,8,2}, {x,x,x,x,7}, {x,x,x,9,x}}; DD(Matrix,0); } public static int extractmin(char[] H,int[] N){ int tt=1111111; int hehe=0; for(int i=0;i<N.length;i++){ if(H[i]!='0') if(N[i]<tt){ tt=N[i]; hehe=i; } } return hehe; } public static void DD(int[][] G,int s){ int[] d=new int[5];//记录路径长度 for(int i=0;i<d.length;i++) d[i]=x; d[s]=0; char[] S={'0','0','0','0','0'};//起点 char[] Q={'A','B','C','D','E'};//终点 char[] W={'A','B','C','D','E'};//所有点的集合 int q=Q.length; int i=0; while(q>0){ S[i]=Q[extractmin(Q,d)]; System.out.print(S[i]+" "); System.out.println(); i++; Q[extractmin(Q,d)]='0'; q--; for(int k=0;k<d.length;k++){ if(Q[k]!='0'){//只有已划分到Q中的端点可做终点点 for(int j=0;j<d.length;j++){ //只有已划分到S中的端点可做起点点 int yy=0; for(int l=0;l<d.length;l++){ if(S[l]==W[j]) yy=1;} //连通且起点在S中 if(G[j][k]!=x&&yy==1) if(d[j]+G[j][k]<d[k]) d[k]=d[j]+G[j][k]; } } } for(int h=0;h<d.length;h++){ if(Q[h]!='0') System.out.print(d[h]+" "); } System.out.println(); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树