开头
解决单源最短路径问题。
时间复杂度上界O(VE),一般O(2*E)左右。
过程简述
先把头设为零,入队。
遍历出边,尝试更新。
更新就入队。
不要惊讶于多次入队,只要没在队里,被更新了,入队!
然后,重复,直到队列为空!
完成。
代码
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
//依然头文件
using namespace std;
//依然头文件
const int N = 10010;
const int M = 40010;
//没用
int n;
int m;
//n个点,m条边
int head[N];
int next[M];//有些编译器和oj会莫名报错
int to[M];
int val[M];//边权
int ce;
//链式前向星
void add(int,int,int);
//链式前向星
int d[N];
//权值
bool used[N];
//看看在没在队里
queue <int> q;
//队列
void spfa(int);
//算法
int main()//主函数
{
scanf("%d",&m);
scanf("%d",&n);