求助,帮忙检查下哪里错了
  • 板块学术版
  • 楼主KingPowers
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/12 22:03
  • 上次更新2023/11/4 03:57:18
查看原帖
求助,帮忙检查下哪里错了
530180
KingPowers楼主2021/10/12 22:03

dijkstra算法的堆优化,是用vector模拟邻接表来存储图的,是把第一个节点当的起始点,写完后自己一造数据发现错了,求助dl们帮忙找一下错误QAQ。

#include<vector>
#include<queue>
#include<iostream>
#include<cstdio> 
using namespace std;
struct edgenode
{
	int to;
	int w;
};
struct node
{
	int id;
	int dis;
	bool operator <(const node& x) const
	{
		return dis>x.dis;
	}
};
vector<edgenode>gra[114514];
priority_queue<node> que;
int dist[114514];
bool vis[114514];
void add_edge(int u,int v,int w)
{
	edgenode t;
	t.to=v;
	t.w=w;
	gra[u].push_back(t);
}
void dijkstra()
{
	dist[1]=0;
	que.push((node){0,1});
	while(!que.empty())
	{
		node temp=que.top();
		que.pop();
		int x=temp.id,d=temp.dis;
		if(vis[x])
			continue;
		vis[x]=true;
		for(int i=0;i<gra[x].size();i++)
		{
			int y=gra[x].at(i).to;
			if(dist[y]>dist[x]+gra[x].at(i).w)
			{
				dist[y]=dist[x]+gra[x].at(i).w;
				if(!vis[y])
					que.push((node){dist[y],y});
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); 
	int n,m,u,v,w;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		dist[i]=0x7fffffff;
	for(int i=1;i<=m;i++)
	{
		cin>>u>>v>>w;
		if(u==1)
			dist[v]=w;
		add_edge(u,v,w);
	}
	dijkstra();
	for( int i = 1; i <= n; i++ )
        printf("%d ", dist[i]);
}
2021/10/12 22:03
加载中...