0
$\开始组$

我正在写我的硕士论文,并试图从以下论文中实现一种新的最短路径算法:https://arxiv.org/abs/2203.03456
在一些函数中(例如ScaleDown),需要恒定的偏离度。常出度意味着图中每个顶点的出度是相同的。

本文提供了一种方法,在该方法中,您可以生成大小为in-dege+out-dege的零维循环,并用循环替换顶点。原始顶点的边将连接到循环。最短路径不会更改,因为您可以以零权重到达循环的每个入口或出口顶点。
我试过了,但如果你有更多的入边而不是出边,不是每个顶点都有相同的度。然后,我尝试只使用循环大小的出度,但如果一个顶点只有引入边,则不起作用。

以下是所述方法的代码:

graph_t最短路径::make_constant_out_degree(graph_tgraph,int num_vertices){//创建一个新图来存储扩展图。graph_t增强图;//映射以跟踪与原始顶点对应的新顶点。std::vector(boost::num_vertices(graph));//迭代所有顶点以创建循环。graph_t::顶点标识符vi,vi_end;for(tie(vi,vi_end)=顶点(图形);vi!=vi_结束++vi){//auto in_degree=boost::in_degere(*vi,graph);auto out_degree=boost::out_degere(*vi,graph);//循环的大小是in_degree和out_degre的总和。//size_t循环大小=in_degree+out_degree;size_t cycle_size=出格;//创建具有零权重边的循环。graph_t::vertex_descriptor prev_vertex=add_vertex(增强图);vertex_cycles[*vi].push_back(prev_vertex);对于(size_ti=1;i<cycle_size;++i){graph_t::vertex_descriptor new_vertex=add_vertex(增强的图形);顶点循环[*vi].push_back(new_vertex);add_edge(前顶点,新顶点,0,增强图);prev_vertex=新顶点;}//将最后一个顶点连接到第一个顶点以完成循环。add_edge(prev_vertex,vertex_cycles[*vi][0],0,augmented_graph);}打印图形(增强图形);//将相邻边附加到其相应的循环。graph_t::edge_iterator ei,ei_end;for(tie(ei,ei_end)=边(图);ei!=ei_结束++ei){//每条边在对应于源和目标的两个循环之间连接。vertex_descriptor src=源(*ei,图形);vertex_descriptor tgt=目标(*ei,图形);int weight=get(edge_weight,graph,*ei);//将边附加到两个循环中每个循环的任何顶点。从列表中删除顶点(如果使用)add_edge(顶点循环[src].back(),顶点循环[tgt].front(),权重,增强图);顶点循环[src].erase(std::删除(vertex_cycles[src].begin(),vertex_cycles[src].end(),vertex_ccycles[src].back()),顶点_循环[src].end());}返回增强图;}

有没有人知道另一种方法,可以将给定的图形转换为具有恒定偏差的图形,或者看到我正在犯的错误?

$\端组$
5
  • $\开始组$ 为什么你关心同样的程度,而你却提到只有外度应该是一样的? $\端组$ 评论 6月5日12:53
  • $\开始组$ 为了确保我理解这一点,您有一个有向图,并且希望添加有向边,以便每个节点的向外角度是恒定的?如果你添加了所有可能的边(即,扩展到完整的有向图),你就完成了。但我认为这不是你想要的。那么,您还想最小化添加的边的数量吗?(我认为这相当于将最终的偏离度最小化。)您愿意添加一些额外的偏离度吗节点如果它进一步降低了偏离度,会不会影响到你的图形? $\端组$ 评论 6月5日13:52
  • $\开始组$ 当一个顶点的阶数为0时,可以将其替换为3个顶点上的完整有向图,其中每个顶点的阶数为2(如您引入的循环中所述)。 $\端组$ 评论 6月5日14:45
  • $\开始组$ @MaxAlekseyev函数需要恒定的偏离度。这意味着每个顶点的每个出射角都必须相同。将其替换为具有3个顶点的完整图的想法很有趣。我需要相应地调整其他顶点,但这可能可行 $\端组$ 评论 6月6日14:53
  • $\开始组$ @比尔·布拉德利是真的。我可以画一个完整的图表。我想要一个更简单的解决方案XD,因为最终我必须确保最短路径不变。 $\端组$ 评论 6月6日14:55

0

重置为默认值

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.