#include<iostream>
using namespace std;
#define n 5
#define m 3
int Allocation[n][m]; //已分配的资源
int Max[n][m];//最大需求
int Need[n][m];//需求 MAX - Allocation = Need
int A = 10, B = 5, C = 7; //初始可用资源
void Init()
{
int i, j;
int a1[n*m] = { 7,5,3,3,2,2,9,0,2,2,2,2,4,3,3 };
int a2[n*m] = { 0,1,0,2,0,0,3,0,2,2,1,1,0,0,2 };
int index = 0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{ //初始化Max和Allocation矩阵
Max[i][j] = a1[index];
Allocation[i][j] = a2[index];
index++;
}
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{ //初始化Need矩阵
Need[i][j] = Max[i][j] - Allocation[i][j];
}
//更新初始分配资源后A,B,C 的剩余量
for(i=0;i<m;i++)
for (j = 0; j < n; j++)
{
if(i==0)
A -= Allocation[j][i];
if(i==1)
B -= Allocation[j][i];
if(i==2)
C -= Allocation[j][i];
}
}
void Adjust()
{
int i, j;
loop:
for (i = 0; i < n; i++)
{
//如果所需资源少于剩余资源,则加入安全序列,并把分配的空间还给A,B,C
if (Need[i][0] <= A&&Need[i][1] <= B&&Need[i][2] <= C &&
!(Need[i][0] == 0 && Need[i][1] == 0 && Need[i][2] == 0)
)
{
A += Allocation[i][0];
B += Allocation[i][1];
C += Allocation[i][2];
printf("%d加入序列,剩余量为: A = %d, B = %d, C = %d\n", i, A, B, C);
Need[i][0] = Need[i][1] = Need[i][2] = 0;
goto loop;
}
}
}
int main(void)
{
Init();
Adjust();
system("pause");
}
银行家算法
最新推荐文章于 2020-11-26 08:10:44 发布
