-
ER
随即图生成程序
2012-07-14 11:14:19|
分类:
复杂网络研究
|
举报
|
字号
订阅
#include
#include
#include
#include
#include
using
namespace
std
;
vector
<
list
><
/p>
g
;
//
邻接
表存储网络
vector
pp<
/p>
;
//
存放概率的向量
< br>
int
edge
;
struct
p_point
{
int
x
;
int
y
;
};
vector
c
on
;
//
为了方便写入文件
int
creat
e_random
(
int
c_begin
,
int
c_end
){
//
产生
从
c_begin
到<
/p>
c_end
之间的任意正数
,
包括
c_begin
和
c
_end
time_t
t
;
Sl
eep
(
500
);
< br>
srand
((
unsig
ned
)
time
(&
t
));
int
kiss
=
< br>rand
()%(
c_end
-
c_begin
+
1
< br>)+
c_begin
;
return
kiss
;
}
int
create_random_also
(
int
cc_begin
,
int
cc_end
){
time_t
t
;
Sl
eep
(
200
);
< br>
srand
((
unsig
ned
)
time
(&
t
));
int
kiss
=
< br>rand
()%(
cc_begin
-
cc_end
+
1
)+
cc_begin
;
return
kiss
;
}
p_point create_
different
(
int
diff_begin
,
int
p>
diff_end
){
//
产生两个从
diff_begin
到
< br>diff_end
之
间的数,包括
//
包括
diff_begin
和
di
ff_end,
并
且保证两者不同
p_point pc
;
pc
.
x
=
create_random
(
dif
f_begin
,
diff_end
)
;
int
cp
=
0
;
do
{
c
p
=
create_random_also
< br>(
diff_begin
,
di
ff_end
);
}
while
(
pc
.
x
==
cp
);
pc
< br>.
y
=
cp
;
return
pc
;
}
void
Read_python_
file
(
int
edge
)
//pp
向量用来存
放程序所需要的概率,
从
python
文件中生成的
,pp
为
全局变量
{
FILE
*
ptr
;
float
a
;
ptr
=
fopen
(
,
);
for
(
int
i
=
0
;
i
<
edge
;
i
++)
{
fscanf
(
ptr
,
< br>,&
a
);
pp
.
push_back
(
a
);
}
}
bool
Find_in_netw
ork
(
int
a
,
int
b
){
//
查找
b
是否
已经和
a
相连接了,
连接了返回
true
,
反之返回
false
for
(
list
::
iterator
it
=
g
[
a
].
begin
();
i
t
!=
g
[
a
].
end
();++
it
){
if
((*
it
)==
p>
b
)
return
true
;
}
return
false
;
}
void
Create_ER_random
(
int
N
,
float
p
){
< br>//
产生的概
率如果比我手动输入的概率小的话就连接<
/p>
g
.
assi
gn
(
N
+
1
,
list
());
g
[
0
].
push_back
(
0
);
e
dge
=
p
*
N
*(
N
-
1
)/
2
;
<
/p>
cout
<<
<
<
edge
;
Read_python_file
(
65534
);
int
ii
p>
=
0
;
//
概率向量指示器
int
c
=
0
;
p_point node
;
int
i
=
0
;
//
节点指示器
< br>
while
(
i
<
edge
){
//
在成功加入一个节点后,把
i
的值
加
1
node
=
create_different
(
1
,
N
);
while
(!
Fi
nd_in_network
(
node
.
x
,
node
.
y
)&&
pp
< br>[
ii
]<
p
< br>&&
i
<
N
+
1
){