P1139(未完,不知名的错误)

本文介绍了在洛谷上一道题目中,利用堆优化求最短路的方法。关键点在于初始化dis数组时,不应将源点相邻点距离设为特定值,而应设为无穷大,以确保这些点能进入队列进行最短路计算。
摘要由CSDN通过智能技术生成

洛谷上这个题的题解还是比较好的,可以借鉴下。 

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=6201;
const int maxv=2501;
const int inf=(1<<31)-1;
vector<int> V[maxn],w[maxn];
int dis[maxv];
int n,m,s,t;
bool visit[maxv]={false};
//没有用堆优化,所以可能会超时O(n^2)
/*
所以问题又来了,如果用堆优化的话,那两种方法怎么写来着??? 
*/ 
struct Node
{
	int v,cost;
};
bool operator < (Node a,Node b)
{
	return a.cost>b.cost;
}
void Dijkstra()
{
	priority_queue<Node> q;
	for(int i=1;i<=n;i++) dis[i]=inf;
	dis[s]=0;
//	for(int i=0;i<V[s].size();i++) 
//	{
//		int tmp=V[s][i];
//		dis[tmp]=w[s][i];//dis数组初始化 
//	}
	
	Node tn;
	tn.v=s; tn.cost=0;
	q.push(tn);
	while(!q.empty())
	{
		//cout<<"*\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值