魔兽争霸3真三ai地图:银行家算法

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 19:04:56
我想找一个能自己输入数据的银行家算法。。
可以用C++ 或C的。。。那位 高手能够指导我一下。。
并且能够得出一个安全序列的算法。。。

银行家算法
#include "dos.h"
#include "conio.h"
#include "alloc.h"

int available[3]={3,3,2};
int max[6][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
int allocation[6][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
int need[6][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
int live[5]={1,1,1,1,1};
int stay[3][3];
int request[3],process[5];
int i,j,p=5,pro,x,k1;
void zhibiao()
{ x=1;
printf(" Max All Nee Ava\n");
printf("PRO A B C A B C A B C A B C\n");
for(i=0;i<p;i++)
{ if(live[i]==1)
{ printf("P%d ",i);
for(j=0;j<=2;j++)
{printf("%-3d",max[i][j]);}printf(" ");
for(j=0;j<=2;j++)
{printf("%-3d",allocation[i][j]);}printf(" ");
for(j=0;j<=2;j++)
{printf("%-3d",need[i][j]);}printf(" ");
}
if(x==1&&live[i]==1) {printf("%-3d%-3d%-3d",available[0],available[1],available[2]);x=0;}
if(live[i]==1) printf("\n");
}
}
int apply()
{ int v=1;
for(i=0;i<=2;i++)
{if(need[pro][i]<request[i]) {v=0;break;}
if(available[i]<request[i]) {v=0;break;}}
if(v==1){for(i=0;i<=2;i++)
{stay[0][i]=allocation[pro][i];allocation[pro][i]+=request[i];
stay[1][i]=need[pro][i];need[pro][i]-=request[i];
stay[2][i]=available[i];available[i]-=request[i];}
}
return(v);
}
int test()
{ int work[3],finish[5]={0,0,0,0,0},v,k=0,t=0;
for(i=0;i<p;i++)
if(live[i]==0) {finish[i]=1;k1--;}
for(i=0;i<=2;i++) work[i]=available[i];
while(1)
{ for(i=0;i<=4;i++)
{ if(finish[i]==0) { v=1;
for(j=0;j<=2;j++)
if(need[i][j]>work[j]) {v=0;break;}
if(v==1) { finish[i]=1;
for(j=0;j<=2;j++) work[j]+=allocation[i][j];
process[k]=i;k++;
}
}
}
if(t==k) break;
else t=k;
if(k==k1) break;
}
if(k==k1) return(1);
else return(0);

}
main()
{
while(1)
{zhibiao();
k1=5;
printf("this system have five processes{0,1,2,3,4},please input one of the processes:P");
scanf("%d",&pro);
if(pro<0||pro>4) break;
printf("P%d three resource of request(,)thay are:",pro);
scanf("%d,%d,%d",&request[0],&request[1],&request[2]);
if(apply()==0) {printf("error or resource are not enough,P%d wait!\n",pro);
printf("please press any key to continue");}
else if(test()==0) {printf("system is not safe,P%d wait!\n",pro);
for(i=0;i<=2;i++)
{ allocation[pro][i]=stay[0][i];
need[pro][i]=stay[1][i];
available[i]=stay[2][i];}
printf("please press any key to continue");}
else {zhibiao();printf("system is safe!\n");
printf("exist a safe order is:");
for(i=0;i<k1-1;i++)
printf("P%d>",process[i]);
printf("P%d",process[k1-1]);
printf("\n please press any key to continue");}
if(need[pro][0]==0&&need[pro][1]==0&&need[pro][2]==0)
for(i=0;i<=2;i++)
{available[i]+=max[pro][i];
live[pro]=0;}
getch();

delay(5000);
}
}