求助
查看原帖
求助
205323
curethat楼主2021/8/19 12:11

Dijkstra,60分,WA#2#6#9#10

#include<bits/stdc++.h>
using namespace std;

const int INF=(2<<30)-1;
int n,m,s,u,v,w,minn,org,next_org,cnt;
struct Edge{
	int v,w;
	Edge(int v,int w):v(v),w(w){}
};
vector<Edge> adj[10005];
bool S[10005];
int dis[10005];

int main(){
	cin>>n>>m>>s;
	cnt=n;
	for(int i=1;i<=n;i++){
		dis[i]=INF;
	}
	for(int i=1;i<=m;i++){
		cin>>u>>v>>w;
		adj[u].push_back(Edge(v,w));
	}
	int org=s;
	dis[org]=0;
	S[org]=true;
	while(cnt>0){
		minn=INF;
		next_org=-1;
		for(int j=0;j<adj[org].size();j++){
			if(S[adj[org][j].v]==0){
				dis[adj[org][j].v]=min(dis[adj[org][j].v],dis[org]+adj[org][j].w);
				if(minn>=dis[adj[org][j].v]){
					next_org=adj[org][j].v;
				}
				minn=min(dis[adj[org][j].v],minn);
			}
		}
		if(next_org==-1){
			break;
		}
		S[next_org]=true;
		org=next_org;
		cnt--; 
	}
	for(int i=1;i<=n;i++){
		cout<<dis[i]<<" ";
	}
	return 0;
}


orz

2021/8/19 12:11
加载中...