0分MLE 求调!!!
查看原帖
0分MLE 求调!!!
641917
liuhaoxing楼主2023/8/15 22:06

我采用的是Dijkstra算法,初学,本蒟蒻暂时不会用堆优化,还望大佬勿怪。

#include <cstdio>
#include <cstring>
int min(int a, int b) {
	return a < b ? a : b;
}
int n, m, s, g[10005][10005], f[10005];
bool vis[10005];
int main() {
	scanf ("%d%d%d", &n, &m, &s);
	memset(g, 0x3f3f3f3f, sizeof(g));
	for (int i = 1; i <= m; i++) {
		int u, v, w;
		scanf ("%d%d%d", &u, &v, &w);
		g[u][v] = min(g[u][v], w);
	}
	for (int i = 1; i <= n; i++)
		f[i] = g[s][i];
	f[s] = 0;
	vis[s] = true;
	for (int i = 1; i <= n; i++) {
		int minn = 0x3f3f3f3f, k = s;
		for (int j = 1; j <= n; j++)
			if (f[j] < minn && !vis[j]) {
				minn = f[j];
				k = j;
			}
		if (k == s)
			break;
		vis[k] = true;
		for (int j = 1; j <= n; j++)
			if (!vis[j] && g[k][j] < 0x3f3f3f3f)
				if (f[j] > f[k] + g[k][j])
					f[j] = f[k] + g[k][j];
	}
	for (int i = 1; i <= n; i++)
		printf ("%d ", f[i]);
	return 0;
}

希望大佬指点指点。

2023/8/15 22:06
加载中...