zj_On 2022-05-05 19:14 采纳率: 0%
浏览 22
已结题

数据结构要存储文件实在是不会


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Maxsize 1000

typedef struct VertexType
{
    int r;//行号
    int c;//列号
    int day;//感染日期
    int df;//计算机的防御等级
    int vt;//病毒的类型 
}VertexType;

typedef struct MGraph
{
    VertexType m[Maxsize][Maxsize];
    int row,col;
    int num;
}MGraph;

MGraph mg;

void MGraphInit()
{
    int i,j;
    for(i=0;i<mg.row;i++)
    {
        for(j=0;j<mg.col;j++)
        {
            mg.m[i][j].vt=0;
            mg.m[i][j].df=0;
            mg.m[i][j].day=0;
            mg.num=0;
            mg.m[i][j].r=i;
            mg.m[i][j].c=j;
        }
    }
}

void MGraphCreat()
{
    MGraphInit();
    printf("请按行输入\n");
    int i,j;
    for(i<0;i<mg.row;i++)
    {
        printf("请输入第%d行:",i+1);
        for(j=0;j<mg.col;j++)
        {
            int a;
            scanf("%d",&a);
            if(a>0)
            {
                mg.m[i][j].vt=a;
            }
            else{
                mg.m[i][j].df=0-a;
            }
        }
    }
}

void virspread(VertexType v,int _nowday)
{
    VertexType qv[4*Maxsize];
    int front=0,rear=1;
    qv[1]=v;
    while(front<=rear)
    {
        v=qv[++front];
        if(v.r-1>=0&&mg.m[v.r-1][v.c].vt==0&&mg.m[v.r-1][v.c].df<=_nowday)
        {
            mg.m[v.r-1][v.c].vt=v.vt;
            qv[++rear]=mg.m[v.r-1][v.c];
        }
        if(v.r+1<mg.row&&mg.m[v.r+1][v.c].vt==0&&mg.m[v.r+1][v.c].df<=_nowday)
        {
            mg.m[v.r+1][v.c].vt=v.vt;
            qv[++rear]=mg.m[v.r+1][v.c];
        } 
        if(v.c+1>=0&&mg.m[v.r][v.c+1].vt==0&&mg.m[v.r][v.c+1].df<=_nowday)
        {
            mg.m[v.r][v.c+1].vt=v.vt;
            qv[++rear]=mg.m[v.r][v.c+1];
        }
        if(v.c-1>=0&&mg.m[v.r][v.c-1].vt==0&&mg.m[v.r][v.c-1].df<=_nowday
        ){
            mg.m[v.r][v.c-1].vt=v.vt;
            qv[++rear]=mg.m[v.r][v.c-1];
    }
  }
}

void vir()
{
    int virtype=1;
    int i,j;
    int nowday=1;
    int num=0;
    while(num<(mg.row*mg.col))
    {
        num=0;
        while(virtype<=Maxsize)
        {
            for(i=0;i<mg.row;i++)
             for(j=0;j<mg.col;j++)
             {
                 if(mg.m[i][j].vt==virtype)
                 {
                     virspread(mg.m[i][j],nowday);
                 }
             }
             virtype++;
        }
        printf("第%d天的传染状态为:\n",nowday);
        for(i=0;i<mg.row;i++)
        {
            for(j=0;j<mg.col;j++)
            {
                if(mg.m[i][j].vt>0)
                {
                    printf(" %d ",mg.m[i][j].vt);
                    num++;
                }
                else printf(" %d ",0-mg.m[i][j].df);
            }
            printf("\n");
        }
        nowday++;
        virtype=1;
    }
}

int virCount(){
    int num=0;
    int i,j,k,ct[Maxsize];
    for(int m=1;m<Maxsize;m++){
        ct[m]=0;
    }
    for(i=0;i<mg.row;i++)
    {
        for(j=0;j<mg.col;j++)
        {
            ct[mg.m[i][j].vt]++;
        }
    }
    printf("感染完后病毒变种的数目:\n");
    printf("\n");
    for(k=1;k<Maxsize;k++)
    {
        if(ct[k]!=0)
        {
            printf("变种类型为:%d的变种数目是:%d\n",k,ct[k]);
        }
    }
    return 0;
}

int main()
{
    int i,j;
    int num=0;
    int flag=1;
    printf("****欢迎进入熊猫烧香病毒感染统计程序****\n");
    int count=1;
    while(flag)
    {
        printf("***************\n");
        printf("第%d次实验\n",count);
        printf("***************\n");
        printf("请输入行列数目(行列数必须为正整数!)\n");
        printf("输入行数:");
        scanf("%d",&mg.row);
        if(mg.row<0)
        {
            printf("行数必须为正整数!请重新测试\n");
        }
        else printf("输入列数:");
        scanf("%d",&mg.col);
        if(mg.col<0)
        {
            printf("列数必须为正整数!请重新测试\n");
        }
        else
        {
            MGraphCreat();
            printf("请确定你的输入:\n");
            for(i=0;i<mg.row;i++)
            {
                for(j=0;j<mg.col;j++)
                {
                    if(mg.m[i][j].vt!=0)
                    printf("%d ",mg.m[i][j].vt);
                    else 
                    printf("%d ",0-mg.m[i][j].df);
                }
                printf("\n");
            }
            printf("\n");
        }
        for(i=0;i<mg.row;i++)
        {
            for(j=0;j<mg.col;j++)
            {
                if(mg.m[i][j].vt>0)
                num++;
            }
        }
        if(num=0)
        {
            printf("网络安全,无病毒!!\n");
        }
        else
        {
            vir();
            virCount();
        }
        count++;
    }
    return 0;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 5月13日
    • 创建了问题 5月5日

    悬赏问题

    • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
    • ¥15 用visualstudio2022创建vue项目后无法启动
    • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
    • ¥500 把面具戴到人脸上,请大家贡献智慧
    • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
    • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
    • ¥30 c#打开word开启修订并实时显示批注
    • ¥15 如何解决ldsc的这条报错/index error
    • ¥15 VS2022+WDK驱动开发环境
    • ¥30 关于#java#的问题,请各位专家解答!