POJ-2387(原始dijkstra求最短路)

Til the Cows Come Home

POJ-2387

  • 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是O(n2).
  • 需要注意的是,一定要看清楚题目的输入要求,是先输入边,再输入顶点,一开始我没看清,wrong answer了一次。
package POJ;
import java.util.*;
public class POJ_2387 {
	private static int n,t;
	static int [][]w;
	static boolean []flag;//是否被遍历过
	static int sta;//开始结点
	static int []dis;//distance数组
	static final int INF=0x3f3f3f3f;
	public static int dijikstra() {
		dis=new int[n];
		flag=new boolean[n];
		Arrays.fill(flag, false);
		for(int i=0;i<n;i++) {
			if(i!=sta)
				dis[i]=INF;
			else dis[i]=0;
		}
		for(int i=0;i<n;i++) {
			int index=-1,mins=INF;
			for(int j=0;j<n;j++) {
				if(!flag[j]&&dis[j]<=mins) {
					mins=dis[index=j];
				}
			}
			if(index==-1)
				break;
			flag[index]=true;
			for(int j=0;j<n;j++)
				dis[j]=Math.min(dis[j], dis[index]+w[index][j]);
		}
		return dis[0];
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		//注意:这里先输入边再输入顶点!
		t=cin.nextInt();
		n=cin.nextInt();
		w=new int[n][n];
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++)
				w[i][j]=INF;
			w[i][i]=0;
		}
		for(int i=0;i<t;i++) {
			int from,to;
			from=cin.nextInt();
			to=cin.nextInt();
			int len=cin.nextInt();
			w[from-1][to-1]=w[to-1][from-1]=Math.min(len, w[from-1][to-1]);
		}
		sta=n-1;
		System.out.println(dijikstra());
	}
}

posted @   Garrett_Wale  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示