航线--dijkstra
来源:互联网 发布:java计算器布局 编辑:程序博客网 时间:2024/05/17 04:59
1000天以内要到达目的地,已知所有航线,快能在第几天抵达目的地呢?
输入描述:
一行包含两个整数N(2<=N<=500),M(1<=M<=2000)。表示公有N个港,M条航线。起点为1,终点为N。
接下来M行,每行包含五个整数P,Q(1<=P,Q<=n), K(1<=K<=1000), X,Y(0<=X,Y<=10000),
代表P,Q两个港有航线并需要K天,并且该航线在第X天到第Y天天气恶劣不可通行。
输出描述:
一个整数,最快第几天到达目的地
输入例子:
4 4
2 1 1 7 13
4 3 2 10 11
1 3 8 9 12
2 3 3 2 10
输出例子:
14
//答案就是要求在无向图从1到n的最短路径public class Main{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int map[][]=new int[n+1][n+1]; for(int i=0;i<n+1;i++){//初始化所有点相互不可达为-1 for(int j=0;j<n+1;j++){ map[i][j]=-1; } } int s[][]=new int[n+1][n+1];//点不可达的起始时间 int e[][]=new int[n+1][n+1];//点不可达的终止时间 for(int i=0;i<m;i++){ int p=sc.nextInt(); int q=sc.nextInt(); int k=sc.nextInt(); int x=sc.nextInt(); int y=sc.nextInt(); map[p][q]=k;//两个港有航线则两个点双向可达,边的大小为时间 map[q][p]=k; s[p][q]=x; s[q][p]=x; e[p][q]=y; e[q][p]=y; } sc.close(); System.out.println(dijkstra(map,s,e,n)); } /* * DijStra是求最短路径的算法。算法步骤: * 初始集合只包括一个源点V,然后把距离v最小的点u加入集合,再把距离距离u最小的点加入集合,如此递归,直到所有点都在集合中 */ public static int dijkstra(int[][]map,int [][]s,int [][]e,int n){ int dist[]=new int[n+1]; boolean vis[]=new boolean[n+1]; Arrays.fill(dist,Integer.MAX_VALUE); dist[1]=0; for(int i=1;i<=n;i++){ int min=Integer.MAX_VALUE; int v=1; for(int j=1;j<=n;j++){//找到下一个点 if(!vis[j]&&dist[j]<min){ min=dist[j]; v=j; } } vis[v]=true; for(int k=1;k<=n;k++){ if(!vis[k]&&map[v][k]!=-1){ int tmp=dist[v]+map[v][k]; if(tmp<s[v][k]){//在不可到达的时间前到达了 dist[k]=Math.min(tmp,dist[k]); }else{//在不可到达的时间段内到达 if(dist[v]>e[v][k]){//在前往k前已经过了不可到达时间 dist[k]=Math.min(tmp,dist[k]); }else{//在不可通行的时间范围内到达,则只能暴风雨过后再出发 dist[k]=Math.min(dist[k],e[v][k]+map[v][k]); } } } } } return dist[n]+1;//dist[n]为到达n需要几天,答案是第几天 }}
阅读全文
0 0
- 航线--dijkstra
- dijkstra拓展(规划最短航线问题)
- 航线设置
- 航线设置
- 航线设计
- 去吴哥航班新航线
- ahoi2005 lane 航线规划
- 航线设计 (序列DP)
- 航线设置(dp)
- bzoj1969LANE 航线规划
- POJ4124伟大的航线
- dijkstra
- dijkstra
- Dijkstra
- Dijkstra
- DIJKSTRA
- DIJKSTRA
- Dijkstra
- Mac 操作积累笔记
- spring初学
- Redis 学习笔记4: Redis 3.2.1 集群搭建
- POJ2718 Smallest Difference
- javaWeb:servlet
- 航线--dijkstra
- ImportError: No module named PIL
- 光驱作为yum源并开机自动挂载光驱
- 关于android学习开篇 颜色
- 从零开始 React 服务器渲染
- Hive的聚合函数
- java从小白到架构师大牛必看书籍
- opencv 头文件 包含 include 的问题
- android自定义权限