洛谷上这个题的题解还是比较好的,可以借鉴下。
#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"