#include<bits/stdc++.h> using namespace std; struct progress{ int max[3]; int all[3]; int need[3]; char pname[4]; }; void fac(int n,int m,int *se,progress *p){ int flag[n]; for(int i=0;i<n;i++) flag[i]=0; int num=0; int in=n; while(in){ num++; for(int i=0;i<n;i++){ if(flag[i]!=2) flag[i]=0; } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(p[i].need[j]>se[j]) flag[i]=1; } } // for(int i=0;i<n;i++) cout<<flag[i]<<" ";cout<<endl; for(int k=0;k<n;k++){ if(flag[k]==0){ in--; for(int l=0;l<m;l++){ se[l]+=p[k].all[l]; } flag[k]=2; break; } } if(num>5){ break; } } // cout<<"in:"<<in; // cout<<"num:"<<num<<endl; if(in>0){ cout<<"找不到安全序列,处于不安全状态。"; } else cout<<"找到安全序列,处于安全状态。"; } void printend(int n,int m,progress *p,int *se){ cout<<"name max allocation need available"<<endl; for(int i=0;i<n;i++){ cout<<p[i].pname<<" "; for(int j=0;j<m;j++){ cout<<p[i].max[j]<<" "; } cout<<"| "; for(int j=0;j<m;j++){ cout<<p[i].all[j]<<" "; } cout<<"| "; for(int j=0;j<m;j++){ cout<<p[i].need[j]<<" "; } cout<<"|"; if(i==0){ for(int j=0;j<m;j++){ if(j==0){ cout<<" "<<se[j]<<" "; } else if(j<m-1) cout<<se[j]<<" "; else cout<<se[j]; } } cout<<endl; } fac(n,m,se,p); } int main(){ int n; int m; cin>>n>>m; int s[m]; progress p[n]; for(int i=0;i<m;i++){ cin>>s[i]; } for(int i=0;i<n;i++){ cin>>p[i].pname; for(int j=0;j<m*2;j++){ if(j<m) cin>>p[i].max[j]; else cin>>p[i].all[j-m]; } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ p[i].need[j]=p[i].max[j]-p[i].all[j]; } } int se[m]; for(int i=0;i<m;i++){ se[i]=s[i]; } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ se[i]-=p[j].all[i]; } } printend(n,m,p,se); return 0; }
到底哪出了问题?有测试点过不去
标签:int,max,flag,算法,pname,progress,安全性,银行家 From: https://www.cnblogs.com/lf-ancer/p/16906898.html