最短路求助
  • 板块学术版
  • 楼主_LOSER_
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/10/27 17:23
  • 上次更新2023/10/27 05:36:07
查看原帖
最短路求助
629269
_LOSER_楼主2022/10/27 17:23

RT
P2349 金字塔
dijkstra16分

#include<bits/stdc++.h>
using namespace std;
int N, M, u, v, w, dis[1100], dq[1100],vv, qz[1010][1010], zdz[1100],minx=1000000000;
bool pd[1010];
int main() {
	scanf("%d%d", &N, &M);
	for (int i = 1; i <= M; i++) {
		scanf("%d%d%d", &u, &v, &w);
		qz[u][v] = w;
		qz[w][v] = w;
	}
	pd[1] = 1;
	zdz[1] = 0;
	dis[1] = 0;
	for (int i = 2; i <= N; i++) {
		dis[i] = 1e7;
		if (qz[1][i] != 0) {
			dis[i] = qz[1][i] * 2;
			zdz[i] = qz[1][i];
			dq[i] = 1;
		}
	}
//	for (int i = 1; i <= N; i++) {
//		cout << pd[i] << " " << dis[i] << " " << dq[i] <<" "<<zdz[i]<< endl;
//	}
	for(int i=2;i<=N;i++){
		minx=99999999;
		for(int j=1;j<=N;j++){
			if(!pd[j]){
				if(dis[j]<minx){
					vv=j;
					minx=dis[j];
				}
			}
		}
		pd[vv]=1;
		for(int j=1;j<=N;j++){
			if(!pd[j]&&qz[vv][j]!=0){
				if(qz[vv][j]>zdz[vv]){
					if(dis[j]>dis[vv]-zdz[vv]+qz[vv][j]+qz[vv][j]){
						dis[j]=dis[vv]-zdz[vv]+qz[vv][j]+qz[vv][j];
						zdz[j]=qz[vv][j];
						dq[j]=vv;
					}
				}else{
					if(dis[j]>dis[vv]+qz[vv][j]){
						dis[j]=dis[vv]+qz[vv][j];
						zdz[j]=zdz[vv];
						dq[j]=vv;
					}
				}
			}
		}
	}
	cout<<dis[N];
	return 0;
}

不会排版,各位神犇凑合着看

2022/10/27 17:23
加载中...