迪克斯特拉算法,求调
  • 板块学术版
  • 楼主Wxy13589159456
  • 当前回复17
  • 已保存回复17
  • 发布时间2025/1/12 18:19
  • 上次更新2025/1/12 21:57:12
查看原帖
迪克斯特拉算法,求调
1251425
Wxy13589159456楼主2025/1/12 18:19
#include<bits/stdc++.h>
using namespace std;
int n,m,far[1001];
bool ji[1001];//是否进入集合
int ma[1001][1001];//邻阶表
int main() 
{
	memset(ma,0x3f,sizeof(ma));
	memset(far,0x3f,sizeof(far));
	cin>>n>>m;
	int a,b,c;
	for(int i=1;i<=m;i++)
	{
		cin>>a>>b>>c;
		ma[a][b]=c;
	}
	//输入
	far[1]=0;
	for(int i=1;i<=n;i++)
	{
		int t=-1;
		for(int j=1;j<=n;j++)
			if(ji[i]==0 && (t==-1 || far[j]<far[t]))
				t=j;
		ji[t]=1;
		for(int j=1;j<=n;j++)
			far[j]=min(far[j],far[t]+ma[t][j]);
	}
	//算法
	for(int i=1;i<=n;i++)
		cout<<i<<" "<<far[i]<<'\n';
	return 0;
}
2025/1/12 18:19
加载中...