我正在尝试实现karger随机收缩算法,该算法包括随机选择图形的2个相邻顶点并收缩它们直到总共剩下2个顶点。我使用此代码进行随机数生成
#include <time.h>
#include <stdlib.h>
srand(time(NULL));
int r = rand() % v; (v is the number of vertices in the graph and will decrease by 1 for every contraction)
我的输入数据如下:
1(邻接列表1)
2(2的邻接列表)
3(3的邻接列表)等等,直到200个顶点及其邻接列表。
由于我必须在移动中删除节点,我生成的两个随机数,我将它们用于位置,即我将在两个位置选择顶点并且如果它们是相邻节点则收缩它们
我必须运行算法大约c *(n log n)次以获得适当的最小切割,
但是我无法得到最低限度的&lt; 20,我做错了什么?我认为“它不够随意”我怎样才能改进我的解决方案?
答案 0 :(得分:0)
如果我理解正确,这样的事情应该有效:
int min = ( rand() % 20 ); //random number 0-20
int r = ( rand() % (range-min) ) + min; //random number will be greater than min but less than range
printf('%d', numSet[r]); //randomly select array position