普通dijkstra算法只过了#1 #3求助
查看原帖
普通dijkstra算法只过了#1 #3求助
1137805
Ning24楼主2024/4/4 17:15

调了好久实在看不出来哪里错了T_T 求大佬帮忙看看

#include<bits/stdc++.h>
#define ll long long
#define mm memset
#define EPS 1e-8
#define INF 0x7fffffff
const int N = 5e5+10;
//register int
using namespace std;
int n,m,k;	//总共有个点,m条边,k是源点 
bool vis[N];		//标记该点有没有被访问过 
int d[N];		//表示s点到i点的距离 
struct node{
	int e,w;	//v表示s可到达的点,w标识权值 
};
vector<node>v[N];

void Dijkstra(int s){
	for(int i=0;i<=n;i++){
		d[i]=INT_MAX;
	}
	d[s]=0;
	for(int i=1;i<n;i++){	//枚举操作次数 
		int u=0;
		for(int j=1;j<=n;j++){	//枚举点 
			if(!vis[j]&&d[j]<d[u]) u=j;
			vis[u]=true;
			for(auto ed : v[u] ){
				int q=ed.e;
				int r=ed.w;
				if(d[q]>d[u]+r){
					d[q]=d[u]+r;
				}
			}
		}
	}
}

int main(){
	cin>>n>>m>>k;
	for(int i=0;i<m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		v[x].push_back({y,z});
	}
	Dijkstra(k);
	for(int i=1;i<=n;i++){
		cout<<d[i]<<' ';
	}
	//return 0;
} 
2024/4/4 17:15
加载中...