文章

35

粉丝

599

获赞

6

访问

311.7k

头像
请问下spfa问题出在哪里 ac们都是用Dijkstra
P1612
发布于2020年5月10日 18:06
阅读数 9.3k

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
using namespace std;
const int maxn=100010;
struct edge{
	int u,v,w;
	edge(int u,int v,int w):u(u),v(v),w(w){}
};
int n,m,ss;

vector<edge>edges;
vector<int> g[maxn];
long long dis[maxn];
int vis[maxn];

void spfa(int s){
	queue<int> q;
	for(int i=0;i<=n;i++){
	dis[i]=0x3f3f3f3f;
	}
	dis[s]=0;
	memset(vis, 0, sizeof(vis));
	q.push(s);
	while(!q.empty()){
		int u=q.front();q.pop();
		vis[u]=0;
		for(int i=0;i<g[u].size();i++){
			edge& e=edges[g[u][i]];
			if(dis[e.v]>dis[u]+e.w){
				dis[e.v]=dis[u]+e.w;
		
				if(!vis[e.v]){
					vis[e.v]=1;
					q.push(e.v);
				}
			
			}
		}
	}
}
void addedge(int u,int v,int w){
	edges.push_back(edge(u, v, w));
	int sz=edges.size();
	g[u].push_back(sz-1);
}
void init(){
	for(int i=0;i<=n;i+...
登录查看完整内容


登录后发布评论

1 条评论
shyefvow
2022年3月24日 10:18

有向图

赞(0)