银行家算法
来源:互联网 发布:热血传奇闪避命中数据 编辑:程序博客网 时间:2024/06/10 00:07
操作系统上机实习课,简单地实现了一下银行家算法==具体的算法流程就不写了==
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 using namespace std; 7 #define n 5//进程个数 8 #define m 3//资源种类 9 string safety; 10 int Available[m]={2,3,3};//可用资源向量 11 int Request[m];//进程请求向量 12 int Work[m]; 13 bool Finish[n]; 14 int Alloc[n][m]={ 15 {2,1,2}, 16 {4,0,2}, 17 {3,0,5}, 18 {2,0,4}, 19 {3,1,4}, 20 };//已分配资源数量 21 int Need[n][m]={ 22 {3,4,7}, 23 {1,3,4}, 24 {0,0,3}, 25 {2,2,1}, 26 {1,1,0}, 27 };//资源需求量 28 29 //判断是否合法 30 bool Is_legal(int index) 31 { 32 bool flag=true; 33 for(int i=0;i<m;i++){ 34 if(Request[i]>Available[i]||Request[i]>Need[index][i]){ 35 flag=false;break; 36 } 37 } 38 if(!flag)return false; 39 return true; 40 } 41 42 //试探性分配 43 void Change(int index) 44 { 45 for(int i=0;i<m;i++){ 46 Available[i]-=Request[i]; 47 Alloc[index][i]+=Request[i]; 48 Need[index][i]-=Request[i]; 49 } 50 } 51 52 //取消试探性分配 53 void Rechange(int index) 54 { 55 for(int i=0;i<m;i++){ 56 Available[i]+=Request[i]; 57 Alloc[index][i]-=Request[i]; 58 Need[index][i]+=Request[i]; 59 } 60 } 61 62 //安全性检查 63 bool Check(int index) 64 { 65 memset(Finish,false,sizeof(Finish)); 66 bool flag=true; 67 safety="";safety+=index+'0'; 68 for(int i=0;i<m;i++){ 69 Work[i]=Available[i]; 70 if(Work[i]<Need[index][i])flag=false; 71 } 72 if(!flag)return false; 73 for(int i=0;i<m;i++)Work[i]+=Alloc[index][i]; 74 Finish[index]=true; 75 for(int i=0;i<n;i++) 76 { 77 if(Finish[i]==false){ 78 flag=true; 79 for(int j=0;j<m;j++){ 80 if(Work[j]<Need[i][j]){ flag=false;break; } 81 } 82 if(flag){ 83 for(int j=0;j<m;j++){ 84 Work[j]+=Alloc[i][j]; 85 } 86 safety+=i+'0'; 87 Finish[i]=true; 88 i=-1; 89 } 90 } 91 } 92 for(int i=0;i<n;i++){ 93 if(Finish[i]==false)return false; 94 } 95 return true; 96 } 97 98 99 int main()100 {101 int index;102 while(scanf("%d",&index),--index>=0&&index<n)103 {104 for(int i=0;i<m;i++)105 scanf("%d",&Request[i]);106 if(!Is_legal(index)){ puts("不合法");continue; }107 Change(index);108 if(Check(index))109 {110 for(int i=0;i<n;i++){111 printf("%d ",safety[i]-'0'+1);112 }113 puts("");114 }else puts("安全性检查失败");115 Rechange(index);116 }117 return 0;118 }119 120 121 122 123 124 125 126 127
0 0
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- 银行家算法
- hdu 4185(最大匹配)
- hdu 2458(最大独立集)
- hdu 2647(拓扑排序)
- hdu 3342(拓扑排序)
- hdu 4160(最小路径覆盖)
- 银行家算法
- hdu 3038(带权并查集)
- 收藏的博客
- hdu 2120(并查集判环)
- 缺少libz.dylib库的时候引起的一个链接错误
- hdu 3938(离线的并查集)
- hdu 4126(prim+树形dp)
- hdu 2860(并查集应用)
- python os.path