我要编写一个程序,以模拟病毒在人体内的传播。这是描述和规格:
说明:
- 模拟在一个矩阵r_1×c_1和一个容量为k的ICU列表中进行
- 最初,人们将被随机放置在矩阵中
- 对于COVID-19,是健康的,假面的或测试阳性的
- 一开始会非常稀疏
- 人们会不时地插入到常规矩阵中
- 示例1:4 101 33 Alice Healthy
- 示例2:5 101 34蒙面的鲍勃
- 示例3:8 53 21 Xeno Sick
- 示例4:8 101 32 John Sick
规格:
- 戴面具的健康人将保持健康
- 没有口罩的健康人将被正交相邻细胞中的病人感染。
- 例如,在上一张幻灯片中提供的样本中,爱丽丝将在时间t = 8被约翰感染并在时间t = 9患病
- 最初,所有病人的康复时间为14天。
- 每个生病的邻居将使恢复时间增加7天。
- 例如,在时间t = 9,爱丽丝的恢复时间是14 + 7(因为约翰在她旁边)。
- 假设在时间t = 10,爱丽丝还有另一个生病的邻居,她的恢复时间将是(21-1)+7
- 只有在以下情况下,患者才应移至重症监护病房:
- 恢复时间超过28天
- 例如,在时间T = 10,爱丽丝的恢复时间为27天,她将不会发送到ICU
- 例如,在时间T = 11,爱丽丝有另一个生病的邻居,她的恢复时间变成(27-1)+7,她将在t = 11被送往ICU(如果ICU中还没有)
- [ICU中确实有一些房间
- 一旦人们搬到ICU,他/她将一直呆到最后
- 例如,爱丽丝将成为幸存者,直到最后,但将永远留在重症监护病房。
- [当生病的人被其他三个以上生病的人连续包围超过7天时,将会死亡。
- 当一个人死亡时,牢房将变空并被阻塞。
- 您的工作是打印:
- 最后的幸存者比率
- 幸存者的名字(不在ICU中的人)
我发现了类似的解决方案,并对其进行了调整以适应此问题,但我仍然感到困惑和迷失。
特别是,我不确定如何使用自动数据类型,也不确定是否有必要
#include<bits/stdc++.h>
using namespace std;
class patient{
public:
string name, state;
bool inICU;
int prow, pcol, recovery, death;
patient(){}
patient(string name, string state, int prow, int pcol){
this->name = name;
this->state = state;
this->prow = prow;
this->pcol = pcol;
if(state=="Sick")
this->recovery = 14;
else this->recovery = 0;
this->death = 7;
}
};
int hospital_stat[500][500]; //0 for empty, 1 for occupied, 2 for blocked(dead)
patient hospital[500][500];
vector<patient> tarr[500];
void init_matrix(){
for(int i=0;i<100;i++){
for(int j=0;j<100;j++){
hospital_stat[i][j] = 0;
}
}
}
void new_case(int t){
for(auto i=tarr[t].begin();i!=tarr[t].end();i++){
cout<<i->name<<endl;
if(hospital_stat[i->prow][i->pcol]==0){
hospital_stat[i->prow][i->pcol]=1;
hospital[i->prow][i->pcol] = *i;
}
else
{
exit(1);
}
}
}
void check_up(){
for(int i=0;i<500;i++){
for(int j=0;j<500;j++){
if(hospital_stat[i][j]==1 && hospital[i][j].state!="Masked" && hospital[i][j].inICU == false){
int orth=0;
if(i-1>=0 && j-1>=0 && hospital_stat[i-1][j-1]==1 && hospital[i-1][j-1].state=="Sick" && !hospital[i-1][j-1].inICU)
orth++;
if(i+1<500 && j+1<500 && hospital_stat[i+1][j+1]==1 && hospital[i+1][j+1].state=="Sick" && !hospital[i+1][j+1].inICU)
orth++;
if(i-1>=0 && j+1<500 && hospital_stat[i-1][j+1]==1 && hospital[i-1][j+1].state=="Sick" && !hospital[i-1][j+1].inICU)
orth++;
if(i+1<500 && j-1>=0 && hospital_stat[i+1][j-1]==1 && hospital[i+1][j-1].state=="Sick" && !hospital[i+1][j-1].inICU)
orth++;
if(i+1<0 && hospital_stat[i+1][j]==1 && hospital[i+1][j].state=="Sick" && !hospital[i+1][j].inICU)
orth++;
if(i-1>=0 && hospital_stat[i-1][j]==1 && hospital[i-1][j].state=="Sick" && !hospital[i-1][j].inICU)
orth++;
if(j-1>=0 && hospital_stat[i][j-1]==1 && hospital[i][j-1].state=="Sick" && !hospital[i][j-1].inICU)
orth++;
if( j+1<500 && hospital_stat[i][j+1]==1 && hospital[i][j+1].state=="Sick" && !hospital[i][j+1].inICU)
orth++;
if(hospital[i][j].recovery>28 && cap>0){
hospital[i][j].inICU = true;
cap--;
}
if(hospital[i][j].state=="Sick"){
hospital[i][j].recovery--;
if(hospital[i][j].recovery==0)
hospital[i][j].state="Healthy";
}
if(orth>1 && hospital[i][j].state!="Healthy"){
hospital[i][j].state="Sick";
hospital[i][j].recovery += (14+(orth*7));
}
if(orth>2)
hospital[i][j].death--;
}
}
}
}
void simulate(int rows, int cols, int cap, int out_time){
for(int t=0;t<=out_time;t++){
check_up();
new_case(t);
}
}
int main()
{
int rows, cols, cap, out_time, n, t, prow, pcol;
string name, state;
init_matrix();
cin>>rows>>cols>>cap>>out_time>>n;
while(n--){
cin>>t>>prow>>pcol>>name>>state;
patient p(name, state, prow, pcol);
tarr[t].push_back(p);
}
simulate(rows,cols,cap,out_time);
return 0;
}
我不知道哪里出了问题。
您最好的选择是调试程序并逐步执行程序,以查看错误之处。从这里您将能够找出问题,如果仍然不能解决问题,则可以仅针对无法正常工作的部分发布问题,我们可以为您提供帮助