题意:给一个图,求1到n的最短路。
思路:直接写dijkstra,数据量小,其实不用堆优化也行。
用优先队列保存结点,按照距离从小到大排序,可以快速的求出离1距离最小的点。
#pragma warning(disable:4996)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<climits>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
const int inf = INT_MAX;
struct node
{
int to, w;
bool operator <(const node& x)const
{
return w > x.w;
}
};
vector<node> vec[1005];//vector存图
int edgenum[1005], dis[1005], n;//edgenum代表这个顶点的度
bool vis[1005];
void addedge(int u, int v, int val)
{
edgenum[u]++;
edgenum[v]++;
node* t = new node;
t->to = v;
t->w = val;
vec[u].push_back(*t);
t->to = u;
vec[v].push_back(*t);
}//双向边
void dijkstra()
{
int i, j;
for (i = 1;i <= n;i++)
{
dis[i] = inf;
}
d