C语言实现银行家算法源代码
#include "stdio.h"
#define MAXPROCESS 50 /*最大进程数*/
#define MAXRESOURCE 100 /*最大资源数*/
#define true 1
#define false 0
int AVAILABLE[MAXRESOURCE]; /*可用资源数组*/
int MAX[MAXPROCESS][MAXRESOURCE]; /*最大需求矩阵*/
int ALLOCATION[MAXPROCESS][MAXRESOURCE]; /*分配矩阵*/
int NEED[MAXPROCESS][MAXRESOURCE]; /*需求矩阵*/
int REQUEST[MAXPROCESS][MAXRESOURCE]; /*进程需要资源数*/
int FINISH[MAXPROCESS]; /*系统是否有足够的资源分配*/
int p[MAXPROCESS]; /*记录序列*/
int m,n; /*m个进程,n个资源*/
void Init();
int Safe();
void Bank();
void main()
{
Init();
Safe();
Bank();
} /*最大资源数*/
void Init() /*初始化算法*/
{
int i,j;
printf("请输入进程的数目:\n");
scanf("%d",&m);
printf("请输入资源的种类:\n");
scanf("%d",&n);
printf("请输入每个进程最多所需的各资源数,按照%dx%d矩阵输入\n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&MAX[i][j]);
printf("请输入每个进程已分配的各资源数,也按照%dx%d矩阵输入\n",m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&ALLOCATION[i][j]);
NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];
if(NEED[i][j]<0)
{
printf("您输入的第%d个进程所拥有的第%d个资源数错误,请重新输入:\n",i+1,j+1);
j--;
continue;
}
}
}
printf("请输入各个资源现有的数目:\n");
for(i=0;i<n;i++)
{
scanf("%d",&AVAILABLE[i]);
}
}
int Safe() /*安全性算法,返回值:true,false*/
{
int i,j,k,l=0;
int Work[MAXRESOURCE]; /*工作数组*/
for(i=0;i<n;i++)
Work[i] = AVAILABLE[i];
for(i=0;i<m;i++)
{
FINISH[i] = false;
}
for(i=0;i<m;i++)
{
if(FINISH[i] == true)
{
continue;
}
else
{
for(j=0;j<n;j++)
{
if(NEED[i][j]>Work[j])
{
break;
}
}
if(j==n)
{
FINISH[i]=true;
for(k=0;k<n;k++)
{
Work[k]+=ALLOCATION[i][k];
}
p[l++]=i;
i=-1;
}
else
{
continue;
}
}
if(l==m)
{
//cout<<"系统是安全的"<<endl;
printf("系统是安全的\n");
//cout<<"安全序列:"
;<<endl;
printf("安全序列:\n");
for(i=0;i<l;i++)
{
//cout<<p[i];
printf("%d",p[i]);
if(i!=l-1)
{
printf("-->");
}
}
return true;
}
}
printf("系统是不安全的\n");
return false;
}
void Bank() /*银行家算法*/
{
int i,cusneed;
char again;
while(1)
{
printf("请输入要申请资源的进程号(注:第1个进程号为0,依次类推)\n");
scanf("%d",&cusneed);
printf("请输入进程所请求的各资源的数量\n");
for(i=0;i<n;i++)
{
scanf("%d",&REQUEST[cusneed][i]);
}
for(i=0;i<n;i++)
{
if(REQUEST[cusneed][i]>NEED[cusneed][i])
{
printf("您输入的请求数超过进程的需求量!请重新输入!\n");
continue;
}
if(REQUEST[cusneed][i]>AVAILABLE[i])
{
printf("您输入的请求数超过系统有的资源数!请重新输入!\n");
continue;
}
}
for(i=0;i<n;i++)
{
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
NEED[cusneed][i]-=REQUEST[cusneed][i];
}
if(Safe())
{
printf("同意分配请求!\n");
}
else
{
printf("您的请求被拒绝!\n");
for(i=0;i<n;i++)
{
AVAILABLE[i]+=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]-=REQUEST[cusneed][i];
NEED[cusneed][i]+=REQUEST[cusneed][i];
}
}
for(i=0;i<m;i++)
{
FINISH[i]=false;
}
print
f("您还想再次请求分配吗?是请按y/Y,否请按其它键\n");
scanf("%c",&again);
if(again=='y'||again=='Y')
{
continue;
}
break;
}
}
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




