邻接矩阵+Dijkstra求助
查看原帖
邻接矩阵+Dijkstra求助
762117
_Corange_楼主2025/2/2 16:03
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int id,dis;
	Node(){}
	Node(const int&id,const int&dis){
		this->dis=dis;
		this->id=id;
	}
};
auto cmp=[](const Node&a,const Node&b)->bool{
	return a.dis>b.dis;
};
const int maxn=2505,inf=0x3f3f3f3f;
int g[maxn][maxn],dis[maxn];
int t,c,ts,te;
bool vis[maxn];
priority_queue<Node,vector<Node>,decltype(cmp)> q(cmp);
int dijkstra(const int&s,const int&e){
	q.push(Node(s,0));
	while(!vis[e]){
		Node p=q.top();q.pop();
		if(vis[p.id]) continue;
		vis[p.id]=true;
		for(int i=1;i<=t;i++){
			if(p.id!=i&&!vis[i]&&g[p.id][i]!=inf&&dis[i]>g[p.id][i]+dis[p.id]){
				dis[i]=g[p.id][i]+dis[p.id];
				q.push(Node(i,dis[i]));
			}
		}
	}
	return dis[e];
}
int main(){
	cin>>t>>c>>ts>>te;
	memset(g,0x3f,sizeof(g));
	memset(vis,false,sizeof(vis));
	memset(dis,0x3f,sizeof(dis));
	for(int i=1;i<=c;i++){
		int u,v,w;cin>>u>>v>>w;
		g[u][v]=g[v][u]=min(g[u][v],w);
	}
	/*for(int i=1;i<=t;i++){
		for(int j=1;j<=t;j++) cout<<setw(11)<<g[i][j];
		cout<<'\n';
	}*/
	cout<<dijkstra(ts,te);
	return 0;
}

dijkstra中莫名出现死循环,求助,必关。

2025/2/2 16:03
加载中...