熊猫烧香

来源:互联网 发布:淘宝达人怎么赚钱 编辑:程序博客网 时间:2024/04/29 23:59
#include<iostream>using namespace std;#define MAXNODE 100 typedef struct VertexType //节点信息{int day;//第几天感染的int dl;//防御级别int r,c;//行列号int vt;// 病毒类型}VertexType;typedef struct MGraph{   VertexType m[MAXNODE][MAXNODE];int row,colum ,num;//行列数,感染的数目}MGraph;void virspread(VertexType v,int nowday);MGraph mg ;//定义void MGraphInit()//初始化{int i,j;for(i=0;i<mg.row;i++)for(j=0;j<mg.colum;j++){mg.m[i][j].vt =0;mg.m[i][j].dl=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();cout<<"请逐行输入"<<endl;int i,j;for(i=0;i<mg.row;i++){cout<<"输入第"<<i+1<<"行:"<<endl;for(j=0;j<mg.colum;j++){int a;cin>>a;if(a>0) {   mg.m[i][j].vt=a;}else {mg.m[i][j].dl=0-a;  }//if}//for}}//MGraphCreatvoid vir()    //寻找病毒源{  int virtype=1;int i,j;int nowday=1;  while(mg.num<(mg.row*mg.colum)){ mg.num=0;while(virtype<=mg.row){for(i=0;i<mg.row;i++)  for(j=0;j<mg.colum;j++) {if(mg.m[i][j].vt==virtype){  virspread(mg.m[i][j],nowday);}}virtype++; }for(i=0;i<mg.row;i++)for(j=0;j<mg.colum;j++)if((mg.m[i][j].vt)>0) mg.num++;    nowday++;virtype=1;}}void virspread(VertexType v,int _nowday)   //病毒传播函数{VertexType qv[4*MAXNODE];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].dl<=_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].dl<=_nowday){  mg.m[v.r][v.c-1].vt=v.vt;qv[++rear]=mg.m[v.r][v.c-1];}if(v.r+1<mg.row&&mg.m[v.r+1][v.c].vt==0&&mg.m[v.r+1][v.c].dl<=_nowday){  mg.m[v.r+1][v.c].vt=v.vt;qv[++rear]=mg.m[v.r+1][v.c];}if(v.c+1<mg.colum&&mg.m[v.r][v.c+1].vt==0&&mg.m[v.r][v.c+1].dl<=_nowday){   mg.m[v.r][v.c+1].vt=v.vt;qv[++rear]=mg.m[v.r][v.c+1];}}}int main(){system("color 5f");int i,j;int k;int a[MAXNODE];cout<<"输入行列数目"<<endl;cout<<"行:";cin>>mg.row;cout<<"列:";cin>>mg.colum;//输入行列数目MGraphCreat();  cout<<"你的输入为:"<<endl;    for(i=0;i<mg.row;i++){for(j=0;j<mg.colum;j++){if(mg.m[i][j].vt!=0)cout<<mg.m[i][j].vt<<"  ";elsecout<<(0-mg.m[i][j].dl)<<"  ";}cout<<endl;         }cout<<endl;vir();for(int m=1;m<MAXNODE-1;m++)a[m]=0;for(i=0;i<mg.row;i++)for(j=0;j<mg.colum;j++)a[mg.m[i][j].vt]++;system("color 1a");cout<<"感染完后的变种的数目:"<<endl; for(k=1;k<MAXNODE-1;k++)if(a[k]!=0)cout<<"变种类型为 "<<k<<"的变种数目是:"<<a[k]<<endl;return 0;}//main

0 0
原创粉丝点击