银行家算法代码c++ 统资源名称、系统资源数量、进程数量、各进程对资源的最大需求、各进程已申请到资源数等信息初始值不可以在程序中指定固定值,要在程序运行后人工输入。
时间: 2023-12-10 17:36:56 浏览: 54
银行家算法代码c++
4星 · 用户满意度95%
下面是一个简单的银行家算法的 C++ 代码实现,可以根据输入的信息进行资源的分配和检查:
```c++
#include <iostream>
#include <vector>
using namespace std;
const int MAX_RESOURCE = 100;
// 银行家算法
bool banker_algorithm(int m, int n, vector<vector<int>> &max_claim,
vector<vector<int>> &allocated, vector<int> &available,
vector<int> &safe_sequence) {
// 初始化工作向量和 finish 数组
vector<int> work(available);
vector<bool> finish(n, false);
// 检查哪些进程可以运行
int count = 0;
while (count < n) {
bool found = false;
for (int i = 0; i < n; ++i) {
if (!finish[i]) {
bool can_run = true;
for (int j = 0; j < m; ++j) {
if (max_claim[i][j] - allocated[i][j] > work[j]) {
can_run = false;
break;
}
}
if (can_run) {
for (int j = 0; j < m; ++j) {
work[j] += allocated[i][j];
}
safe_sequence.push_back(i);
finish[i] = true;
found = true;
count++;
}
}
}
if (!found) {
return false; // 没有找到可以运行的进程,算法中止
}
}
return true;
}
// 主函数
int main() {
int m, n;
cout << "请输入系统资源数量和进程数量: ";
cin >> m >> n;
// 输入最大需求矩阵
vector<vector<int>> max_claim(n, vector<int>(m));
cout << "请输入各进程对资源的最大需求矩阵:\n";
for (int i = 0; i < n; ++i) {
cout << "进程 " << i << ": ";
for (int j = 0; j < m; ++j) {
cin >> max_claim[i][j];
}
}
// 输入已申请到资源数矩阵
vector<vector<int>> allocated(n, vector<int>(m));
cout << "请输入各进程已申请到资源数矩阵:\n";
for (int i = 0; i < n; ++i) {
cout << "进程 " << i << ": ";
for (int j = 0; j < m; ++j) {
cin >> allocated[i][j];
}
}
// 输入可用资源数向量
vector<int> available(m);
cout << "请输入系统可用资源数量: ";
for (int i = 0; i < m; ++i) {
cin >> available[i];
}
// 运行银行家算法
vector<int> safe_sequence;
bool is_safe = banker_algorithm(m, n, max_claim, allocated, available, safe_sequence);
// 输出结果
if (is_safe) {
cout << "该状态是安全的,安全序列为: ";
for (int i = 0; i < n; ++i) {
cout << "P" << safe_sequence[i];
if (i != n - 1) {
cout << " -> ";
}
}
cout << endl;
} else {
cout << "该状态是不安全的!" << endl;
}
return 0;
}
```
阅读全文