#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
struct Node{
int v,dis;
};
const int maxn=1002;
const int inf=1000000000;
vector<Node> adj[maxn];
int n,d[maxn],num[maxn];
bool inq[maxn]={false};
bool spfa(int s){
//初始化部分!!
fill(d,d+maxn,inf);
fill(num,num+maxn,0);
fill(inq,inq+maxn,false);
//源点入队!
queue<int> q;
q.push(s);
inq[s]=true;
num[s]++;
d[s]=0;
//主体部分!
while(!q.empty()){
int u=q.front();
q.pop();
inq[u]=false;
for(int i=0;i<adj[u].size();i++){
int v=adj[u][i].v;
int dis=adj[u][i].dis;
if(d[u]+dis<d[v]){
d[v]=d[u]+dis;
if(!inq[v]){ //v的最短路径改变了(变短了)则入队!
q.push(v);
inq[v]=true;
num[v]++; //v的入队次数加一!
if(num[v]>=n) return false;
}
}
}
}
return true;
}
int main(){
return 0;
}
spfa算法
最新推荐文章于 2021-03-17 08:08:54 发布