www.pudn.com > bankertest.rar > 44.c
#includestruct YH { int Allocation[5][3]; int Need[5][3]; int Available[3]; int G[3][3]; }; int u,B=0,A=0; int Work[3]; int Request[3]; struct YH st; void W(int i) //系统安全检测函数 {int j; for(j=0;j<=2;j++) { if(Request[j]<=st.Need[i][j]) A++; } if(A==3) for(j=0;j<=2;j++) { if(Request[j]<=st.Available[j]) B++; } else {printf("不安全");} if(B==3) for(j=0;j<=2;j++) { st.Available[j]=st.Available[j]-Request[j]; st.Allocation[i][j]=st.Allocation[i][j]+Request[j]; st.Need[i][j]=st.Need[i][j]-Request[j]; } else {printf("不安全");} } void F() //分配后安全检测函数 { int j,t,C=0,D=0,P[5]; for(j=0;j<=2;j++) Work[j]=st.Available[j]; for(t=0;t<=4;t++) P[t]=0; Loop: for(t=0;t<=4;t++) { for(j=0;j<=2;j++) { if(Work[j]>=st.Need[t][j]&&P[t]==0) C++; } if(C==3) { P[t]=1; D++; for(j=0;j<=2;j++) Work[j]=Work[j]+st.Allocation[t][j]; printf("%d ",t); if(P[t]==1) { C=0; goto Loop; } } C=0; } if(D==5) { printf("安全");u=1;} else {printf("不安全");u=0;} for(j=0;j<=2;j++) Work[j]=st.Available[j]; for(t=0;t<=4;t++) P[t]=0; D=0; t=0; } void Q(int a[],int b[]) { int k; printf("输入Request的值\n"); for(k=0;k<=2;k++) scanf("%d",&a[k]); printf("i=?\n"); scanf("%d",&b[0]); } main() { int i, j,c[1]; printf("输入Allocation的值\n"); for(i=0;i<=4;i++) for(j=0;j<=2;j++) scanf("%d",&st.Allocation[i][j]); printf("输入Need的值\n"); for(i=0;i<=4;i++) for(j=0;j<=2;j++) scanf("%d",&st.Need[i][j]); printf("输入Available的值\n"); for(j=0;j<=2;j++) scanf("%d",&st.Available[j]); F(); Loop1: { Q(Request,c); if (Request[0]==0&&Request[1]==0&&Request[2]==0) printf("测试结束"); else { switch(c[0]) {case 0: W(0); break; case 1: W(1); break; case 2: W(2); break; case 3: W(3); break; case 4: W(4); break; } if(B==3) {F();} A=0; B=0; if(u==1) { for(j=0;j<=2;j++) { st.G[0][j]=st.Allocation[c[0]][j] ; st.G[1][j]=st.Need[c[0]][j] ; st.G[2][j]=st.Available[j]; //printf("%d ",st.Available[j]); } // printf("%d",B); //printf("%d",t); goto Loop1;} if(u==0) { for(j=0;j<=2;j++) { st.Allocation[c[0]][j]=st.G[0][j]; st.Need[c[0]][j]=st.G[1][j]; st.Available[j]=st.G[2][j]; } goto Loop1;} }} scanf("%d",&i); }