高手请进,求指导,算法
程序代码:#include<stdio.h>
int available[3]={3,3,2};
int request[5][3]={0};
int max[5][3]={
{7,5,3},
{3,2,2},
{9,0,2},
{2,2,2},
{4,3,3,}};
int allocation[5][3]={
{0,1,1},
{2,0,0},
{3,0,2},
{2,1,1},
{0,0,2}};
int need[5][3];
int m;
char c;
void init();
void requestf();
int safe();
int judge();
int main(int argc,char *argv[])
{
while(1)
{
init();
requestf();
if(!judge())
return 0;
if(!safe())
return 0;
printf("是否继续Y/N!");
scanf("%c",&c);
if(c=='Y'||c=='y')
continue;
else
return 1;
}
}
void init()
{
int i,j;
/* available[3]={3,3,2};
request[5][3]={0};
max[5][3]={
{7,5,3},
{3,2,2},
{9,0,2},
{2,2,2},
{4,3,3,}};
allocation[5][3]={
{0,1,1},
{2,0,0},
{3,0,2},
{2,1,1},
{0,0,2}};*/
for(i=0;i<5;i++)
for(j=0;j<3;j++)
need[i][j]=max[i][j]-allocation[i][j];
}
void requestf()
{
int k;
printf("请输入你要申请资源的进程\n");
scanf("%d",&m);
printf("请输入各资源请求的数量\n");
for(k=0;k<3;k++)
scanf("%d",&request[m][k]);
}
int judge()
{
int i;
for(i=0;i<3;i++)
if(request[m][i]>need[m][i] || request[m][i]>available[i])
{
printf("请求的资源超过可利用的资源!");
printf("是否继续Y/N!");
scanf("%c",&c);
return 0;
}
for(i=0;i<3;i++)
{
if(request[m][i]<=need[m][i] && request[m][i]<=available[i])
{
available[i]-=request[m][i];
allocation[m][i]+=request[m][i];
need[m][i]-=request[m][i];
}
else
{
printf("请求的资源超过可利用的资源!");
printf("是否继续Y/N!");
printf("所需要的资源不够,进程%d wait....",m);
return 0;
}
}
return 1;
}
int safe()
{
int i,j,l;
int work[3];
int finish[5]={0};
int order[5];
for(i=0;i<3;i++)
work[i]=available[i];
for(i=0;i<5;i++)
{
if(1==finish[i])
continue;
else
{
for(j=0;j<3;j++)
if(need[i][j]>work[j])
break;
if(j==3)
{
work[j]+=allocation[i][j];
finish[i]=1;
order[l++]=i;
i=-1;
}
else
continue;
}
}
if(l==5)
{
printf("安全序列为:\n");
for(i=0;i<5;i++)
printf("%d",order[i]);
}
return 1;
}
此为银行家算法 运行过程中有时会崩溃,求大侠看看









