编写一段描述银行家算法的c++程序
时间: 2023-06-05 21:04:25 浏览: 82
以下是描述银行家算法的C程序:
#include <stdio.h>
#define N 100
int n, m;
int available[N];
int max[N][N];
int allocation[N][N];
int need[N][N];
int work[N];
int finish[N];
void init() {
printf("请输入进程数n和资源种类数m:");
scanf("%d%d", &n, &m);
printf("请输入各资源的总数量:\n");
for(int i = 0; i < m; i++) {
scanf("%d", &available[i]);
}
printf("请输入每个进程需要各种资源的数量:\n");
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
scanf("%d", &max[i][j]);
}
}
printf("请输入每个进程已分配各种资源的数量:\n");
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
scanf("%d", &allocation[i][j]);
}
}
printf("计算每个进程还需要各种资源的数量...\n");
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
need[i][j] = max[i][j] - allocation[i][j];
}
}
}
int safe() {
int count = 0;
for(int i = 0; i < m; i++) {
work[i] = available[i];
}
for(int i = 0; i < n; i++) {
finish[i] = 0;
}
while(count < n) {
int found = 0;
for(int i = 0; i < n; i++) {
if(!finish[i]) {
int j;
for(j = 0; j < m; j++) {
if(need[i][j] > work[j]) {
break;
}
}
if(j == m) {
for(int k = 0; k < m; k++) {
work[k] += allocation[i][k];
}
finish[i] = 1;
found = 1;
count++;
}
}
}
if(!found) {
return 0;
}
}
return 1;
}
int main() {
init();
if(safe()) {
printf("系统处于安全状态,存在安全序列:\n");
for(int i = 0; i < n; i++) {
printf("%d ", finish[i]);
}
printf("\n");
} else {
printf("系统处于不安全状态,不存在安全序列。\n");
}
return 0;
}
阅读全文