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 :(得分:0)
如果您想要均匀随机选取边缘,则算法不正确。 例如:
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。