求助,用vector改的Dijstra,70分
查看原帖
求助,用vector改的Dijstra,70分
251986
Kira_楼主2020/8/3 13:27
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;

int mod = 9973;
const int INF = 2147483647;
const int maxn = 1e4 + 10;
inline void read(int &x)
{
	x = 0;
	char c = getchar();
	int flag = 1;
	while (c < '0' || c > '9')
		flag = (c == '-' ? -1 : 1), c = getchar();
	while (c >= '0' && c <= '9')
		x = x * 10 + c - '0', c = getchar();
	x = x * flag;
}
struct node
{
	ll index, val;
	node(int index, int val) : index(index), val(val) {}
};
int n, m, s;
ll dis[maxn];
int vis[maxn];
vector<vector<node>> Map;
void Dij()
{
	for (int i = 0; i <= n; i++)
		dis[i] = INF;
	for (int i = 0; i < Map[s].size(); i++)
		dis[Map[s][i].index] = Map[s][i].val;
	dis[s] = 0;
	vis[s] = 1;
	for (int k = 0; k < n - 1; k++)
	{
		int index, val = INF;
		for (int i = 1; i <= n; i++)
			if (!vis[i] && dis[i] < val)
				val = dis[i], index = i;
		vis[index] = 1;
		for (int i = 0; i < Map[index].size(); i++)
		{
			if (!vis[Map[index][i].index])
				dis[Map[index][i].index] = min(dis[Map[index][i].index], val + Map[index][i].val);
		}
	}
}
int main()
{
	read(n), read(m), read(s);
	Map = vector<vector<node>>(n + 1);
	for (int i = 0, a, b, c; i < m; i++)
	{
		read(a), read(b), read(c);
		Map[a].push_back(node(b, c));
	}
	Dij();
	for (int i = 1; i <= n; i++)
		cout << dis[i] << ' ';
	return 0;
}

真不知道哪错了,希望大佬能指点一下,谢谢

2020/8/3 13:27
加载中...