首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有向图圆弧列表实现

问有向图圆弧列表实现
EN

Stack Overflow用户
提问于 2011-04-12 01:21:43
回答 1查看 270关注 0票数 0

我正在尝试将图实现为Arc List,虽然这种实现的效率很糟糕,但我错过了什么使它变得如此缓慢的地方?时间被测量为查找来自/到每个节点的弧的平均值。

代码语言:javascript
复制
struct Arc 
{
    int start;
    int end;
    Arc(int start,int end)
      : start(start),
        end(end)
    { }
};

typedef vector<Arc> ArcList;

class AListGraph
{
public:
    AListGraph(IMatrix* in); //Fills the data from Incidence Matrix
    bool IsE(int va,int vb); //checks if arc exists a->b
    int CountEdges(); //counts all the arcs
    int CountNext(int v); //counts all outgoing arcs from v
    int CountPrev(int v); //counts all arcs incoming to v

private:
    ArcList L;
    int VCount;
};

//Cut out constructor for clarity

int AListGraph::CountEdges() 
{
    return L.size();
}

int AListGraph::CountNext(int v)
{
    int result=0;
    for(ArcList::iterator it =L.begin();it!=L.end();it++)
    {
        if(it->end==v)result++;
    }
    return result;
}

int AListGraph::CountPrev(int v)
{
    int result=0;
    for(ArcList::iterator it =L.begin();it!=L.end();it++)
    {
        if(it->start==v)result++;
    }
    return result;
}
EN

回答 1

Stack Overflow用户

发布于 2011-04-12 01:42:58

嗯,你的实现可能是最糟糕的:为了找到输入/输出边,你要遍历整个图。

你真的需要一个圆弧列表吗?通常邻接列表的效率要高得多。

邻接表的一个天真的实现是保持一个矢量>圆弧,其中圆弧的大小是节点的数量。

给定一个节点u,arcsu会给出所有的外边。你也可以弄清楚如何优化它的内部边缘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5625017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档