请大佬帮忙看看这个迪杰斯特拉错在了哪
查看原帖
请大佬帮忙看看这个迪杰斯特拉错在了哪
1468942
Iwillwininthistime楼主2025/7/25 10:11
#include<bits/stdc++.h>
using namespace std;
struct edge{
	int to,val;
	edge(int t,int w):to(t),val(w){}
};
class mycomparison {
public:
    bool operator()(const pair<int, int>& lhs, const pair<int, int>& rhs) {
        return lhs.second > rhs.second;
    }
};
const int inf=1e9;
void solve(){//[1,index]模型 
	int n,m,s;cin>>n>>m>>s;//出发点 
	vector<int>dis(n+10,inf);
	vector<bool>vis(n+10,false);
	vector<list<edge>>grid(m+1);
	priority_queue<pair<int,int>,vector<pair<int,int>>,mycomparison>pq;
	
	for(int i=1;i<=m;i++){
		int u,v,w;cin>>u>>v>>w;
		grid[u].push_back(edge(v,w));
	}
	dis[s]=0;
	pq.push(pair<int,int>(s,0));//存放出边和权重 
	
//	for(int i=1;i<=n;i++){
//		int minval=INT_MAX;
//		int cur=1;		
//		for(int v=1;v<=n;v++){
//			if(!vis[v]&&dis[v]<minval){
//				minval=dis[v];cur=v;
//			}
//		}
//		dis[cur]=true;
//		
//		for(int v=1;v<=n;v++){
//			if(!vis[v]&&grid[cur].first!=inf&&dis[cur]+grid[].second<dis[v]){
//				
//			}//如果这个点没有被访问,如果这个点联通着cur,dis[cur]+grid[cur][]<dis[v] 
//		}
//		pair<int,int>cur=pq.top();pq.pop();
//		vis[cur.first]=true;
//		
//		for(pair<int,int>i:grid[cur.first]){
//			if(!vis[i.frist]&&dis[cur.first]+i.second<dis[i.first]){
//				dis[i.first]=dis[cur.first]+i.second;
//				pq.push(pair<int,int>(i.first,dis[i.first]));
//			}
//		}
//	}
	while(!pq.empty()){
		pair<int,int>cur=pq.top();pq.pop();
		if(vis[cur.first]) continue;
		
		vis[cur.first]=true;
		
		for(edge i:grid[cur.first]){
			if(!vis[i.to]&&dis[cur.first]+i.val<dis[i.to]){
				dis[i.to]=dis[cur.first]+i.val;
				pq.push(pair<int,int>(i.to,dis[i.to]));
			}
		}
	}
	
	for(int i=1;i<=n;i++){
		if(dis[i]==inf) cout<<INT_MAX<<" ";
		else cout<<dis[i]<<" ";
	} 	
}
int main(){
	int t=1;//cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

WA了一个点,求条

2025/7/25 10:11
加载中...