银行家算法代码 c++
时间: 2023-11-26 15:46:51 浏览: 257
银行家算法(C++)源代码
根据提供的引用内容,以下是银行家算法的C++代码实现:
```c++
#include <iostream>
using namespace std;
const int N = 100; // 最大进程数
const int M = 100; // 最大资源数
int n, m; // 进程数和资源数
int available[M]; // 可用资源数
int maxn[N][M]; // 最大需求矩阵
int allocation[N][M]; // 已分配矩阵
int need[N][M]; // 需求矩阵
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矩阵
for (int i = 0; i < n; i++)
for (int j = 0; j < m; 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))
{
flag = true;
finish[i] = 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;
}
```
阅读全文