永远之后吉他扫弦谱:银行家算法输出安全序号不正确

来源:百度文库 编辑:中科新闻网 时间:2024/05/09 13:56:14
我只列出了对当前状态是否安全这一判断,但输出安全序号不对,我知道在结构体内的名字没定义正确,请高手指点!!
#include<stdio.h>
#define TRUE 1
#define FALSE 0
#define M 5
#define N 4
int available[N]={1,5,2,0};
int max[M][N]={{0,0,1,2},{1,7,5,0},{2,3,5,6},{0,6,5,2},{0,6,5,6}};
int allocation[M][N]={{0,0,1,2},{1,0,0,0},{1,3,5,4},{0,6,3,2},{0,0,1,4}};
int need[M][N];
struct pr
{char name;
int finishflag;
}p[5];
char na[5];

void output()
{
int i,j,z;
printf("\n系统剩余资源:\n");
for(z=0;z<N;z++)
{printf(" %d ",available[z]);}
printf("\n目前分配情况是:\n");
for(i=0;i<M;i++)
{
printf("\nP[%d]: ",i);
for(j=0;j<N;j++)
{
printf(" %d ",allocation[i][j]);
}
}
printf("\n尚需要量:\n");
for(i=0;i<M;i++)
{
printf("\nP[%d]: ",i);
for(j=0;j<N;j++)
{
need[i][j]=max[i][j]-allocation[i][j];
printf(" %d ",need[i][j]);
}
}

}
int fenpei()//分配
{

int finishcnt=0,k=0,count=0;
for(int j=0;j<5;j++)
p[j].finishflag=FALSE;

while(finishcnt<5)
{
for(int i=0;i<5;i++)
{
for(int y=0;y<4;y++)
if(p[i].finishflag==FALSE&&available[y]>need[i][y])
{
available[y]+=allocation[i][y];
p[i].finishflag=TRUE;
finishcnt++;

na[k++]=p[i].name;

break;
}

}
count++;//禁止循环过多
if(count>5)return FALSE;
}
return TRUE;

}
void main()
{
output();

if(fenpei())
{
printf("这样的分配是安全!\n");
printf("安全序号为:\n");
for(int k=0;k<5;k++)
printf("-->%c",na[k]);
printf("\n");
}
else printf("分配不安全!\n");

operate();}