!-- Loading 底层遮罩 -->

最短路

Dijkstra(堆优化)

        memset(dis, 64, sizeof(dis));
	dis[s] = 0;
	q.push({ s,0 });
	while (!q.empty())
	{
		int u = q.top().v;
		q.pop();
		if (vis[u])continue;
		vis[u] = true;
		for (int i = h[u]; i; i = g[i].nxt)
			if (dis[g[i].to] > dis[u] + g[i].val)
			{
				dis[g[i].to] = dis[u] + g[i].val;
				q.push({ g[i].to,dis[g[i].to] });
			}
	}

SPFA

        memset(dis, 64, sizeof(dis));
	dis[s] = 0, vis[s] = true, q.push(s);
	while (!q.empty())
	{
		int u = q.front();
		q.pop();
		vis[u] = false;
		for (int i = h[u]; i; i = g[i].nxt)
			if (dis[g[i].to] > (long long)dis[u] + g[i].val)
			{
				dis[g[i].to] = dis[u] + g[i].val;
				if (!vis[g[i].to])
					q.push(g[i].to), vis[g[i].to] = true;
			}
	}

 

Floyd

 for (int k = 1; k <= n; k++)
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);

 

posted @ 2022-04-27 19:28  Thinker-X  阅读(27)  评论(0)    收藏  举报