题解 | #最短路径问题#

最短路径问题

https://www.nowcoder.com/practice/e372b623d0874ce2915c663d881a3ff2

#include <bits/stdc++.h>

using namespace std;

const int N = 1010;

int dist[N]; // 每个点到s的距离 
int value[N];
int g[N][N];
int w[N][N]; // 花费 
bool st[N];
int n, m;
void dijkstra(int s, int t){
	memset(dist, 0x3f, sizeof(dist));
	memset(value, 0x3f, sizeof(value));
	dist[s] = 0;
	value[s] = 0;
	
	for (int i=1; i<=n; i++){
		int tmp = -1;
		for (int j=1; j<=n; j++){
			if (!st[j] && (tmp == -1 || dist[j] <= dist[tmp])){
				if (tmp == -1 || value[j] < value[tmp]){
					tmp = j;
				}
			}
		}
		st[tmp] = true;
		
		for (int j=1; j<=n; j++){
			if (dist[j] > dist[tmp] + g[tmp][j]){
				dist[j] = dist[tmp] + g[tmp][j];
				value[j] = value[tmp] + w[tmp][j];
			}
            else if (dist[j] == dist[tmp] + g[tmp][j]){
                if (value[j] > value[tmp] + w[tmp][j]){
                    value[j] = value[tmp] + w[tmp][j];
                }
            }
		} 
	}
}

int main(){
	
	while (cin >> n >> m){
		if (n == 0 && m == 0){
			break;
		}
		memset(g, 0x3f, sizeof(g));
		memset(w, 0x3f, sizeof(w));
		for (int i=1; i<=m; i++){
			int x, y, d, p;
			cin >> x >> y >> d >> p;
			if (g[x][y] > d){
                g[x][y] = d;
                g[y][x] = d;
                w[x][y] = p;
                w[y][x] = p;
            }
            else if (g[x][y] == d && w[x][y] > p){
                g[x][y] = d;
                g[y][x] = d;
                w[x][y] = p;
                w[y][x] = p;
            
            }
		}
		int s, t;
		cin >> s >> t;
		dijkstra(s, t);
//		for (int i=1; i<=n; i++){
//			cout << dist[i] << " ";
//		}
		cout << dist[t] << " " << value[t] << endl;
				
	}
	return 0;
} 

全部评论

相关推荐

10-29 15:51
嘉应学院 Java
后端转测开第一人:你把简历的学历改成北京交通大学 去海投1000份发现基本还是没面试
点赞 评论 收藏
分享
11-17 11:15
门头沟学院 Java
金山办公终于发offer了,但薪资和平台都不如已有的offer打算拒了,A不了薪资,不满意直接拒了,留给需要的人嘿嘿嘿时间线:10.14线下一面&nbsp;,10.23线上二面,下午发测评,11月1日HR面,11月14日电话谈薪,11月17日直接发offer
star__plat...:好兄弟干的好啊,解气。金山第一次笔难度高的离谱,第二次简单的离谱全A了,用人部门筛选中估计最后还是要挂我,就这今早智联招聘还给我发信息让我投
offer帮选
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务