spfa,dijkstra都是90分,求助
查看原帖
spfa,dijkstra都是90分,求助
213437
JamesMessi楼主2021/5/17 19:12

spfa

#include<bits/stdc++.h>
using namespace std;
struct node{
	int v,w;
};
vector<node>a[100001];
int dis[100001],in_q[100001];
queue<int>q;
void spfa(int start){
	memset(dis,0x3f,sizeof(dis));
	memset(in_q,0,sizeof(in_q));
	dis[start]=0;
	q.push(start);
	in_q[start]=1;
	while(!q.empty()){
		int u,v,w;
		u=q.front();
		q.pop();
		in_q[u]=0;
		for (int i=0;i<a[u].size();i++){
			v=a[u][i].v;
			w=a[u][i].w;
			if (dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if (in_q[v]==0) q.push(v);
			}
		}
	}
}
int main(){
	int n,m,start,minn,u,v,w;
	cin>>n>>m>>start;
	for (int i=1;i<=m;i++){
		cin>>u>>v>>w;
		node t;
		t.v=v;
		t.w=w;
		a[u].push_back(t);
	}
	spfa(start);
	for (int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
}

dijkstra

#include<bits/stdc++.h>
#define P pair<int,int>
using namespace std;
struct node{
	int v,w;
};
vector<node>a[100001];
int dis[100001],in_q[100001];
priority_queue<P,vector<P>,greater<P> >q;
void dijkstra(int start){
	int u,v,w;
	memset(dis,0x3f,sizeof(dis));
	memset(in_q,0,sizeof(in_q));
	dis[start]=0;
	q.push(make_pair(0,start));
	while(!q.empty()){
		u=q.top().second;
		q.pop();
		if (in_q[u]==1) continue;
		in_q[u]=1;
		for (int i=0;i<a[u].size();i++){
			v=a[u][i].v;
			w=a[u][i].w;
			if (dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				q.push(make_pair(dis[v],v));
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	int n,m,start,u,v,w;
	cin>>n>>m>>start;
	for (int i=1;i<=m;i++){
		cin>>u>>v>>w;
		node t;
		t.v=v;
		t.w=w;
		a[u].push_back(t);
	}
	dijkstra(start);
	for (int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
}

恳请巨佬们帮助

2021/5/17 19:12
加载中...