有向弧列表实现

我正在尝试将图形作为Arc List实现,虽然这个实现工作效率很可怕,但我错过了什么让它变得如此之慢?时间测量为从每个节点寻找弧的平均值。
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;
}
    
已邀请:
好吧,你的实现是最糟糕的:为了找到输入/输出边缘,你可以浏览整个图形。 你真的需要弧形列表吗?通常,邻接列表更有效。 邻接列表的简单实现是保持向量>弧,其中弧的大小是节点的数量。 给定节点u,arcs [u]为您提供所有出边。你也可以弄清楚如何在边缘优化它。     

要回复问题请先登录注册