gpt4 book ai didi

c++ - 有向图弧表实现

转载 作者:行者123 更新时间:2023-12-03 12:51:48 24 4
gpt4 key购买 nike

我正在尝试将图形实现为弧列表,虽然这种实现的效率非常糟糕,但我错过了什么导致它如此缓慢?时间被测量为寻找来自/到每个节点的弧的平均值。

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;
}

最佳答案

好吧,你的实现是最糟糕的:为了找到输入/输出边缘,你必须遍历整个图表。

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

邻接列表的一个简单实现是保留一个 vector >弧,其中弧的大小是节点的数量。

给定一个节点 u,arcs[u] 给出所有的出边。您也可以弄清楚如何针对边缘进行优化。

关于c++ - 有向图弧表实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5625017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com