如何从图形的邻接列表表示中随机选择边缘
How to pick edge randomly from adjacency list representation of graph
vector<int> adj[5]; // I have 5 nodes
// some code for pushing nodes in adjacency list
for( int i = 0; i < 5; i++ ) // printing graph
{
for( int p = 0 ; p < adj[i].size(); p++ )
{
cout<< i << " , "<< adj[i][p] << endl;
}
}
srand (time(NULL));
for( int k = 0 ; k < 3; k++ ) // just want to see random output multiple times, so using for loop 3 times.
{
int i = rand() % 5; // picking node ( 1-5) randomly
int p = adj[i].size(); // calculating number of adjacent nodes
int j = rand() % p; // here I am wrong,
cout<< " Random edge " << i+1 <<", " << j;
}
实际上,我想实施Kargar的Min cut计划。为此,我想随机选择一个边缘。但我面临这个问题:
我收到浮点异常。 core dumped
如果我将上面的代码添加到我的程序中。我检查了带有 int i
和 int p
的行是否计算完美(我打印了它们以查看(,但是如果您在代码中添加int j = rand() % p
,它会给出浮点异常(核心转储(。
谁能帮我?
如果你想均匀地随机选择一个边,你的算法是不正确的。例如:
0: 1,2,3
1: 2
2: 3,4,5
3: 4,5
4: 5
在这种情况下,选择边 (1,2( 的概率大于边 (0,1(。
至于异常问题,我想一些 adj[i].size(( 等于 0。
此外,虽然 rand(( 不返回负数,但请注意负数的模数可以是负数,例如 -3%5=-3。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么 Serial.println(<char[]>);返回随机字符?
- 字符串-C++后显示的随机字符
- 如何将ampl中的集合表示为c++中的向量
- std::is_base_of表示ctor编译错误
- 循环中的随机函数
- 在c++构造函数中使用随机字符串生成器
- 输入中的字符串数未知(以字母表示)
- 我可以信任表示整数的浮点或双精度来保持精度吗
- c++模板来表示多项式
- 使用std::mt19937从字符串中返回一个随机单词
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 如何在C++中高效地构造随机骰子
- 在类中使用随机生成器时出现性能问题
- 询问在设计我的手臂模拟器功能表示格式1
- 在将数字随机生成为数组期间从内存输出随机数的数组
- CMakeLists.txt中的命名空间表示法
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 如何从图形的邻接列表表示中随机选择边缘