# include<bits/stdc++.h>
using namespace std;
# define maxn 105
int num_pr,num_re;
struct Banker{
char name[10];
int max[maxn];
int allocation[maxn];
int need[maxn];
}a[maxn];
int resources[maxn];
int available[maxn];
int work[maxn];
int finish[maxn];
void print()
{
printf("name max allocation need available\n");
for(int i = 0;i < num_pr;i++)
{
printf("%s",a[i].name);
for(int j = 0;j < num_re;j++)
printf(" %d",a[i].max[j]);
printf(" |");
for(int j = 0;j < num_re;j++)
printf(" %d",a[i].allocation[j]);
printf(" |");
for(int j = 0;j < num_re;j++)
printf(" %d",a[i].need[j]);
printf(" |");
if(i==0)
{
for(int j = 0;j < num_re;j++)
printf(" %d",available[j]);
}
printf("\n");
}
for(int i = 0;i < num_pr;i++)
{
if(finish[i]==0)
{
//printf("no");
printf("找不到安全序列,处于不安全状态。\n");
return ;
}
}
//printf("yes");
printf("找到安全序列,处于安全状态。\n");
}
void sec()
{
int nums = num_pr;
while(nums--)
{
for(int i = 0;i < num_pr;i++)
{
if(finish[i]==1)
continue;
int flag = 1;
for(int j = 0;j < num_re;j++)
{
if(a[i].need[j] > work[j])
{
flag = 0;
break;
}
}
if(flag)
{
finish[i] = 1;
for(int j = 0;j < num_re;j++)
work[j] += a[i].allocation[j];
break;
}
}
}
}
void com()
{
for(int i = 0;i < num_pr;i++)
{
for(int j = 0;j < num_re;j++)
{
a[i].need[j] = a[i].max[j] - a[i].allocation[j];
available[j] += a[i].allocation[j];
}
}
for(int i = 0;i < num_re;i++)
{
available[i] = resources[i] - available[i];
work[i] = available[i];
}
}
void scan()
{
scanf("%d",&num_pr);
scanf("%d",&num_re);
for(int i = 0;i < num_re;i++)
scanf("%d",&resources[i]);
for(int i = 0;i < num_pr;i++)
{
getchar();
scanf("%s",a[i].name);
for(int j = 0;j < num_re;j++)
scanf("%d",&a[i].max[j]);
for(int j = 0;j < num_re;j++)
scanf("%d",&a[i].allocation[j]);
}
}
int main(void)
{
scan();
com();
sec();
print();
}
银行家算法----安全性检查C语言实现
最新推荐文章于 2023-06-01 15:57:56 发布