最短路算法

博客分享了Dijkstra、Floyd、Bellman - Ford和SPFA算法相关资源,其中Dijkstra算法有堆优化及matlab相关内容,每个算法都给出了对应的博客链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dijkstra

https://www.cnblogs.com/fzl194/p/8728018.html

const int N = 1e5 + 5;
int mp[N][N];
int d[N];
bool vis[N];
int V;      //顶点数

void dijkstra(int s)
{
    fill(d, d + V, INF);
    fill(vis, vis + V, false);
    d[s] = 0;

    while(1) {
        int v = -1;
        //从未选择的点中选一个距离最小的顶点
        for (int i = 0; i < V; ++i) {
            if (!vis[i] && (v == -1 || d[i] < d[v])) v = i;
        }
        if (v == -1) break;
        vis[v] = 1;
        for (int u = 0; u < V; ++u) {
            d[u] = min(d[u], d[v] + mp[v][u]);
        }
    }
}

堆优化

priority_queue<pii > q;

struct Edge
{
    int next, to, w;
}e[M];

inline void add(int x, int y, int z)
{
    e[++tot].w = z;
    e[tot].next = head[x];
    e[tot].to = y;
    head[x] = tot;
}

void dijkstra()
{
    d[s] = 0;
    q.push(mp(0, s));
    while (!q.empty()) {
        int x = q.top().second;
        q.pop();
        if (vis[x]) continue;
        vis[x] = 1;
        for (int i = head[x]; i; i = e[i].next) {
            int y = e[i].to;
            if (d[y] > d[x] + e[i].w) {
                d[y] = d[x] + e[i].w;
                q.push(mp(-d[y], y));
            }
        }
    }
}

matlab

clc
clear all
function [d path] = dijkstra(A, s, t)
%Dijkstra最短算法实现, A为图的赋权邻接矩阵
%当输入参数含有s和t时, 求s到t的最短路
if nargin==2
	flag=0;
elseif nargin==3
	flag=1;
end
n=length(A);%节点数
for i=1:n
	A(i,j)=inf;
end;
V=zeros(1,n);
D=zeros(1,n);
T=A+inf;
T(s,:)=A(s,:);
A(:,s)=inf

path =[];
 
for k=1:n-1
    [p,q] = min(T);
    q1=q;
    [p,q] = min(p);
    v(q)=q1(q);
    if flag
    
    [value,index] = min(temp);
   
    visit(index) = 0;
    
    %更新 如果经过index节点,从起点到每个节点的路径长度更小,则更新,记录前趋节点,方便后面回溯循迹
    for k=1:n
        if D(k)>D(index)+W(index,k)
           D(k) = D(index)+W(index,k);
           parent(k) = index;
        end
    end
    
   
end
 
distance = D(e);%最短距离
%回溯法  从尾部往前寻找搜索路径
t = e;
while t~=st && t>0
 path =[t,path];
  p=parent(t);t=p;
end
path =[st,path];%最短路径
 
 
end
Floyd

https://www.cnblogs.com/fzl194/p/8729340.html

void floyd()
{
    for (int k = 0; k < n; ++k) {
        for (int i = 0; i < n; ++i) {
            for(int j = 0; j < n; ++j) {
                mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);
}
Bellman-Ford

https://www.cnblogs.com/fzl194/p/8728529.html

SPFA

https://www.cnblogs.com/fzl194/p/8728883.html

struct Edge
{
    int next, to, w;
}edge[M];

void add(int x, int y, int z)
{
    edge[++tot].next = head[x];
    edge[tot].to = y;
    edge[tot].w = z;
    head[x] = tot;
}

void spfa()
{
    queue<int> q;
    for (int i = 1; i <= n; ++i) {
        d[i] = INF;
        vis[i] = 0;
    }
    q.push(s);
    d[s] = 0, vis[s] = 1;
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        vis[u] = 0;
        for (int i = head[u]; i; i = edge[i].next) {
            int v = edge[i].to;
            if (d[v] > d[u] + edge[i].w) {
                d[v] = d[u] + edge[i].w;
                if (!vis[v]) q.push(v), vis[v] = 1;
            }
        }
    }
}
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值