gpt4 book ai didi

c++ - 在使用 BOOST 图形库生成的图形中添加随机边

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:08 25 4
gpt4 key购买 nike

我想在我的图中添加随机边,如下所示:

#include <iostream>
#include <utility> // for std::pair
#include <algorithm>
#include <boost/graph/adjacency_list.hpp>
#include "boost/graph/topological_sort.hpp"
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/graphviz.hpp>

int main()
{
using namespace std;
using namespace boost;

typedef adjacency_list< listS, vecS, undirectedS > undigraph;

int const N = read_int_from_user("Number of vertices: ");

undigraph g(N);

// add some edges, // #1
for (int i = 0; i != N; ++i)
{
for (int j = 0; j != N; ++j)
{
add_edge(i, j, g);
}
}
write_graphviz(cout, g);
}

#1 之后的行就是这样做的。

但如您所见,每个顶点有 8 条边,但我希望最多只有 4 条边,并且希望以随机方式连接所有顶点,最重要的是每个顶点只能有 4 价顶点。我怎样才能做到这一点?

最佳答案

编辑:我说的是“有序对”,而我的意思是“无序对”!希望现在的措辞更清楚了。

您需要做的是从 无序 非负整数对集合中进行无放回采样。因为计算机表示有序对比表示无序对要容易得多,生成这个集合的通常方法是生成第一个元素小于第二个元素的所有有序对:

vector<pair<int, int> > pairs;

for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
pairs.push_back(make_pair(i, j));
}
}

例如如果 N = 4,要考虑的可能边集是:

0, 1
0, 2
0, 3
1, 2
1, 3
2, 3

一旦有了这个集合,从中取样的一个好方法是使用 reservoir sampling .

关于c++ - 在使用 BOOST 图形库生成的图形中添加随机边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12479207/

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