第一次写dijkstra就写挂了
  • 板块灌水区
  • 楼主E1_de5truct0r
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/11/10 17:45
  • 上次更新2023/11/5 08:19:40
查看原帖
第一次写dijkstra就写挂了
195198
E1_de5truct0r楼主2020/11/10 17:45
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
inline int getint(){
	char ch;long long w=0,f=1;ch=getchar();
	while(ch<'0' || ch>'9'){if(ch=='-') f=-f;ch=getchar();}
	while(ch>='0' && ch<='9'){w=(w<<1)+(w<<3)+(ch^48);ch=getchar();}
	return w*f;
}
int u[200005],w[200005],dis[100005],head[200005],nxt[200005],tot;
bool vis[100005];
void add(int x,int y,int v)
{
	tot++;
	u[tot]=y;
	w[tot]=v;
	nxt[tot]=head[x];
	head[x]=tot;
}
int n,m,start;
void Dijkstra(int start)
{
	for(int i=1;i<=n;i++)
	{
		int minn=1e9,mini;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j] && minn>dis[j])
			{
				vis[j]=true;
				minn=dis[j];
				mini=j;
			}
		}
		for(int j=head[mini];j;j=nxt[j])
			dis[u[j]]=min(dis[u[j]],dis[mini]+w[j]);
	}
	dis[start]=0;
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<" ";
}
int main()
{
	memset(dis,0x7f,sizeof(dis));
	cin>>n>>m>>start;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		if(u==start) dis[v]=w;
	}
	Dijkstra(start);
	return 0;
}

现在是O(n²)算法,但是结果不太对

2020/11/10 17:45
加载中...