为什么我的朴素dij怎么都过不了啊
  • 板块学术版
  • 楼主hjqhs
  • 当前回复13
  • 已保存回复13
  • 发布时间2023/1/26 10:31
  • 上次更新2023/10/24 03:04:02
查看原帖
为什么我的朴素dij怎么都过不了啊
724988
hjqhs楼主2023/1/26 10:31
#include<bits/stdc++.h>
using namespace std;
int dis[59],w[59][59];
//dis[u]代表从节点0(即起点)到u最短路径长度
//w[u][v]表示连接u,v边的长度 不相连即为0 
bool isyou[59];
//isyou[i]表示是否为最优路径中的节点 
int main(){
	int m;cin>>m;//m表示有多少个点 
	int n;cin>>n;//n表示有多少条边 
	//int ed;cin>>ed;//ed为终点
	for(int i=1;i<=n;i++){ 
		int a,b,c;
		cin>>a>>b>>c;
		w[a][b]=c;
		w[b][a]=c;
	}
	dis[1]=0;
	isyou[1]=1;
	for(int i=2;i<=m;i++)dis[i]=10000;
	for(int i=1;i<=m;i++){
		int k=0;
		for(int j=1;j<=m;j++)
			if(isyou[j]==0&&(k==0||dis[j]<dis[k]))
				k=j;
		isyou[k]=1;
		for(int j=1;j<=m;j++)
			if(isyou[j]==0&&(dis[k]+w[k][j]<dis[j]))
				dis[j]=dis[k]+w[k][j];
	}
	for(int i=2;i<=m;i++)
		cout<<i<<"    "<<dis[i]<<endl;
	return 0;
}

测试样例:

5 7
1 2 2
1 3 4
2 3 1
2 5 2
3 5 6
1 4 7
3 4 1
2023/1/26 10:31
加载中...