• 大小: 109KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: ER  SIR  

资源简介

复杂ER网络上的经典SIR模型的实现,对经典的SIR模型进行数据验证。

资源截图

代码片段和文件信息

/*
 *在前一个理论改进实现的基础上,对于模拟部分传播做改进:对于每个节点的传播概率是当前传播概率乘上自己节点度的贝塔次方在感染节点邻居所有节点度贝塔次方占的比例
 *所有模拟和理论都是用同一个图。SIR
 *ER-随机网络.c (邻接表文件): 定义控制台应用程序的入口点。
 */
//0感染态;1易感态;2恢复态
#include 
#include 
#include “time.h“
#include 
#include 

#define NetMaxSize 5000
#define AverK 8//设置网络平均度为10
#define u0 0.1//节点自己恢复的概率
#define u1 0.1//基础网络恢复率
//#define ui 0.2
#define w 1.0//资源利用率
//#define theory_over 1e-9//理论终止t+1步与t步之差小于此值结束
#define p0 0.01//初始感染节点比例
#define ResProvide 1.0
#define Preference 0.0

//边表节点
typedef struct EdgeNode
{
    int adjvex;//储存对应顶点的下标(邻接点编号)
    //int weight;//用于储存权值
    struct EdgeNode * next;//指向下一个边表节点
} EdgeNode;

//顶点表节点
typedef struct VertexNode
{
    int verNum;//顶点编号
    int node_K;//节点的度数
    int nodeState;//用来表示节点的状态:感染态0,易感态1和恢复态2三个状态
    struct EdgeNode * firstarc;//指向边表节点
} VertexNode;
//图节点
typedef struct Graph
{
    VertexNode agjList[NetMaxSize];//顶点表数组
    //int numVextexesnumEdges;//当前顶点数和边数
} Graph;
//创建图的邻接表结构
void GreateGraph(Graph * G)
{
    double p;
    p=(double)AverK/NetMaxSize;
    EdgeNode * e;//动态存储的边节点
    for(int i=0; i    {
        G->agjList[i].verNum=i;
        G->agjList[i].node_K=0;
        G->agjList[i].nodeState=1;//在传播开始之前除了随机挑选的感染态节点外,其它节点都是易感态
        G->agjList[i].firstarc=0;
    }
    /*
    1>利用头插法
    2>因为无向图没有方向,所以创建边表节点的时候,要重复创建两次
    并进行相反的操作
    */
    for(int i=0; i    {
        for (int j=i+1; j        {
            double test1=0.0;
            /*printf(“输入边(ViVj)的下标i和j的值:“);
            scanf(“%d %d“&i&j);*/
            test1=rand()/(double)(RAND_MAX);
            if(test1            {
                e=(EdgeNode *)malloc(sizeof(EdgeNode));//动态分配空间来储存边表节点:i连向j
                e->adjvex=j;
                e->next=NULL;
                G->agjList[i].node_K++;
                e->next=G->agjList[i].firstarc;
                G->agjList[i].firstarc=e;
                e=(EdgeNode *)malloc(sizeof(EdgeNode));//分配节点让节点j连向i
                e->adjvex=i;
                e->next=NULL;
                G->agjList[j].node_K++;
                e->next=G->agjList[j].firstarc;
                G->agjList[j].firstarc=e;
            }
        }
    }
   /* for(int i=0; i    {
        int k=G->agjList[i].node_K;
        if(k==0)
        printf(“节点%d “i);
    }*/
}
int calculateDegreeDistribution(Graph * G)
{
    double networkDegree=0.0;
    double statistic[NetMaxSize];
    for (int i=0; i    {
        statistic[i]=0;
    }
    for(int i = 0; i < NetMaxSize; i++)//统计整个网络的总的度数
    {
        networkDegree+=G->agjList[i].node_K;
    }
    printf(“networkDegree is %f\n“networkDegree);
    printf(“ = %f\n“networkDegree/(double)NetMaxSize);//输出网络平均度
    for(int i = 0; i < NetMaxSize; i++)//这里从1开始是因为数据degree坐标是从1开始的
        statist

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-17 16:53  ERSIRtheoryJD\
     文件      202765  2018-09-13 16:25  ERSIRtheoryJD\ER Networks.txt
     文件        1128  2018-09-13 20:36  ERSIRtheoryJD\ERSIRtheoryJD.cbp
     文件         146  2018-09-14 10:44  ERSIRtheoryJD\ERSIRtheoryJD.depend
     文件         360  2018-12-17 16:53  ERSIRtheoryJD\ERSIRtheoryJD.layout
     目录           0  2018-09-13 21:19  ERSIRtheoryJD\bin\
     目录           0  2018-11-29 08:36  ERSIRtheoryJD\bin\Debug\
     文件       43756  2018-09-14 11:16  ERSIRtheoryJD\bin\Debug\ERSIRtheoryJD.exe
     文件       20441  2018-12-17 14:52  ERSIRtheoryJD\main.c
     目录           0  2018-09-13 21:19  ERSIRtheoryJD\obj\
     目录           0  2018-11-29 08:36  ERSIRtheoryJD\obj\Debug\
     文件       14591  2018-09-14 11:16  ERSIRtheoryJD\obj\Debug\main.o

评论

共有 条评论