import java.util.*;
public class Bank {
public static void main(String[] args) {
int process;//定义进程数量
int resource=3;//定义资源种类是3
int[] available;//可利用的资源
int[][] max,allocation,need;//分别是最大的需求数、已分配的资源、需求资源
Scanner scanner=new Scanner(System.in);
System.out.print("请输入进程数>>");
process=scanner.nextInt();
System.out.print("请输入可利用资源向量(已定义3个资源种类)>>");
available=new int[resource];
for (int i = 0; i < resource; i++) {
available[i]=scanner.nextInt();
}
System.out.println("请输入分配矩阵");
allocation=new int[process][resource];
for (int i = 0; i
System.out.print("请输入进程"+(i+1)+"已分配的资源数>>");
for (int j = 0; j < resource; j++) {
allocation[i][j]=scanner.nextInt();
}
}
System.out.println("请输入最大需求矩阵");
max=new int[process][resource];
for (int i = 0; i System.out.print("请输入进程"+(i+1)+"最大需求的资源数>>");
for (int j = 0; j < resource; j++) {
max[i][j]=scanner.nextInt();
}
}
need=new int[process][resource];
for (int i = 0; i < process; i++) {
for (int j = 0; j < resource; j++) {
need[i][j]=max[i][j]-allocation[i][j];
}
}
System.out.println();
/*
* 打印资源分配表
* */
System.out.println("To时刻的资源分配表");
System.out.println(" 进程 max\t\tallocation\t need\t\tavailable");
System.out.print("P0 ");
for (int i = 0; i System.out.print(max[0][i]+" ");
}
System.out.print(" ");
for (int i = 0; i System.out.print(allocation[0][i]+" ");
}
System.out.print(" ");
for (int i = 0; i System.out.print(need[0][i]+" ");
}
System.out.print(" ");
for (int i = 0; i System.out.print(available[i]+" ");
}
System.out.println();
for (int i = 1; i < process; i++) {
System.out.print("P"+i+" ");
for (int j = 0; j < resource; j++) {
System.out.print(max[i][j]+" ");
}
System.out.print(" ");
for (int j = 0; j < resource; j++) {
System.out.print(allocation[i][j]+" ");
}
System.out.print(" ");
for (int j = 0; j < resource; j++) {
System.out.print(need[i][j]+" ");
}
System.out.println();
}
/**
* 检查安全序列
* */
int[] work=new int[3];//定义一个数组work用来存放可利用的资源数目
for (int i = 0; i < work.length; i++) {
work[i]=available[i];//初始化work
}
boolean[] finish=new boolean[process];//定义标志finish,表示分配资源的置为true,没有非配的置为false
for (int i = 0; i < process; i++) {
finish[i]=false;//初始化数组finish
}
int[] array=new int[process];//定义一个数组保存安全序列
int num=
1;
int count1=1;
while(num for (int i = 0; i < process; i++) {
for (int j = 0; j < 3; j++) {
if(finish[i]==false){
if(need[i][0]<=work[0]&;&;need[i][1]<=work[1]&;&;need[i][2]<=work[2]){
for (int j2 = 0; j2 < resource; j2++) {
work[j2]=work[j2]+allocation[i][j2];
}
finish[i]=true;
array[count1-1]=i;
count1++;
}
}
}
}num++;
}
int count=0;
for (int i = 0; i < array.length; i++) {
if(finish[i]==true){
count++;
}
}
if(count==process){
System.out.println("存在一个安全序列:");
for (int i = 0; i < array.length; i++) {
System.out.print("P"+array[i]+" ");
}
}
else{System.out.println("系统处于不安全状态!");}
System.out.println();
/**
* 以下是进程请求资源时的情况
* */
boolean flag=true;
while(flag){
int[] req=new int[reso