dijkstra离奇错误
  • 板块灌水区
  • 楼主hair_loss_tree
  • 当前回复9
  • 已保存回复9
  • 发布时间2023/12/15 20:59
  • 上次更新2023/12/15 21:24:12
查看原帖
dijkstra离奇错误
1057595
hair_loss_tree楼主2023/12/15 20:59
#include <bits/stdc++.h>
using namespace std;
//dijkstra,普通,邻接矩阵;
int a[3010][3010],d[3010],n,m,s;
int v[3010];
void dijkstra(){
	memset(d,0x3f,sizeof(d));//dist数据
	memset(v,0,sizeof(v));//节点标记
	d[s]=0;
	for(int i=1;i<n;i++){//重复标记n-1次
		int x=0;
		//找到未标记节点中dist最小的
		for(int j=1;i<=n;j++)if(!v[j]&&(x==0||d[j]<d[x]))x=j;
		v[x]=1;
		//用全局最小值点x更新其他节点
		for(int y=1;y<=n;y++)d[y]=min(d[y],d[x]+a[x][y]);
	}
}
int main(){
	freopen("样例.in","r",stdin);
	cin>>n>>m>>s;
	//构建邻接矩阵
	memset(a,0x3f,sizeof(a));
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		a[x][y]=min(a[x][y],z);
	}
	//求单源最短路径
	dijkstra();
	for(int i=1;i<=n;i++)cout<<d[i]<<" ";
	return 0;
}

甚至请两位教练对了两遍,没发现错误

2023/12/15 20:59
加载中...