微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在我的 postgresql 呼吸优先搜索算法中找到所有路径,这段代码目前只找到最短路径?

如何解决如何在我的 postgresql 呼吸优先搜索算法中找到所有路径,这段代码目前只找到最短路径?

我正在寻找如何在这个呼吸优先搜索算法中找到所有路径..有没有人可以帮助通过互联网搜索如何显示所有路径,但我无法成功找到...我将不胜感激

CREATE OR REPLACE FUNCTION component_search(paper_node integer,cited_node integer)
RETURNS integer[] AS $$
    DECLARE
        parent integer[];
        level integer[];
        i integer;
        frontier integer[];
        next integer[];
        u integer;
        v integer;
        shortest_path integer[];
        p integer;
    BEGIN
        i := 1;
        frontier[0] := paper_node;
        level[paper_node] := 0;
        parent[paper_node] = -1;
        WHILE frontier IS NOT NULL 
        LOOP
            next := NULL;
            FOREACH u IN ARRAY frontier 
            LOOP
                FOR v IN (SELECT paperid FROM edge WHERE citedpaperid=u UNION ALL SELECT citedpaperid FROM edge WHERE paperid=u)
                LOOP
                    IF level[v] IS NULL THEN
                        parent[v] := u;
                        level[v] := i;
                        next = array_append(next,v);
                        i := i + 1;
                    END IF;
                END LOOP;
            END LOOP;
            frontier := next;
        END LOOP;

        shortest_path = array_append(shortest_path,cited_node);
        p := parent[cited_node];
        WHILE p != -1
        LOOP
            shortest_path = array_prepend(p,shortest_path);
            p := parent[p];
        END LOOP;

        return shortest_path;
END; $$
LANGUAGE PLPGsql;



select component_search(9508155,9309140);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。