c++ 银行家算法代码
时间: 2023-11-17 17:08:00 浏览: 32
```c++
#include <iostream>
using namespace std;
const int N = 100; // 最大进程数和资源数
int n, m; // 进程数和资源数
int available[N]; // 可用资源数
int maxn[N][N]; // 最大需求矩阵
int allocation[N][N]; // 已分配矩阵
int need[N][N]; // 需求矩阵
bool finish[N]; // 进程是否完成标记
bool check(int i) { // 检查进程i是否能够完成
for (int j = 0; j < m; j++) {
if (need[i][j] > available[j]) {
return false;
}
}
return true;
}
int main() {
// 输入进程数和资源数
cin >> n >> m;
// 输入可用资源数
for (int i = 0; i < m; i++) {
cin >> available[i];
}
// 输入最大需求矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> maxn[i][j];
}
}
// 输入已分配矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> allocation[i][j];
need[i][j] = maxn[i][j] - allocation[i][j];
}
}
// 银行家算法
int cnt = 0; // 完成进程数
while (cnt < n) {
bool flag = false; // 是否有进程可以完成
for (int i = 0; i < n; i++) {
if (!finish[i] && check(i)) {
finish[i] = true;
flag = true;
cnt++;
for (int j = 0; j < m; j++) {
available[j] += allocation[i][j];
}
}
}
if (!flag) { // 没有进程可以完成
cout << "Unsafe state!" << endl;
return 0;
}
}
cout << "Safe state!" << endl;
return 0;
}
```
--相关问题--:
1. 银行家算法的原理是什么?
2. 银行家算法的优缺点