// 输入最大需要矩阵、分配矩阵和可用资源向量
int max_need[MAX_PROCESS][MAX_RESOURCE];
int allocation[MAX_PROCESS][MAX_RESOURCE];
int available[MAX_RESOURCE];
// 定义当前使用资源矩阵和需要资源矩阵
int current_need[MAX_PROCESS][MAX_RESOURCE];
int current_allocation[MAX_PROCESS][MAX_RESOURCE];
// 定义进程完成状态
int finish[MAX_PROCESS];
// 定义安全序列数组
int safe_sequence[MAX_PROCESS];
int seq_counter = 0;
// 检查当前状态是否安全
int is_safe() {
int work[MAX_RESOURCE];
int i, j;
// 初始化work数组为可用资源
for (i = 0; i < MAX_RESOURCE; i++) {
work[i] = available[i];
}
// 初始化finish数组为false
for (i = 0; i < MAX_PROCESS; i++) {
finish[i] = 0;
}
// 复制当前使用资源矩阵和需要资源矩阵
for (i = 0; i < MAX_PROCESS; i++) {
for (j = 0; j < MAX_RESOURCE; j++) {
current_need[i][j] = max_need[i][j] - allocation[i][j];
current_allocation[i][j] = allocation[i][j];
}
}
// 找到一个未完成的进程
int flag = 1;
while (flag) {
flag = 0;
for (i = 0; i < MAX_PROCESS; i++) {
if (!finish[i]) {
int j;
for (j = 0; j < MAX_RESOURCE; j++) {
// 如果该进程的需求大于可用资源,则跳过
if (current_need[i][j] > work[j]) {
break;
}
}
// 如果该进程的所有需求都小于等于可用资源
if (j == MAX_RESOURCE) {
// 将该进程标记为已完成
finish[i] = 1;
flag = 1;
// 释放该进程占用的资源
for (j = 0; j < MAX_RESOURCE; j++) {
work[j] += current_allocation[i][j];
}
// 将该进程添加到安全序列
safe_sequence[seq_counter++] = i;
}
}
}
}
// 检查是否所有进程都完成
for (i = 0; i < MAX_PROCESS; i++) {
if (!finish[i]) {
return 0; // 不安全
}
}
return 1; // 安全
}
int main() {
int i, j;
// 输入最大需要矩阵
printf("Enter the maximum need matrix:\n");
for (i = 0; i < MAX_PROCESS; i++) {
for (j = 0; j < MAX_RESOURCE; j++) {
scanf("%d", &max_need[i][j]);
}
}
// 输入分配矩阵
printf("Enter the allocation matrix:\n");
for (i = 0; i < MAX_PROCESS; i++) {
for (j = 0; j < MAX_RESOURCE; j++) {
scanf("%d", &allocation[i][j]);
}
}
// 输入可用资源向量
printf("Enter the available resource vector:\n");
for (i = 0; i < MAX_RESOURCE; i++) {
scanf("%d", &available[i]);
}
if (is_safe()) {
printf("The system is in safe state.\nSafe sequence: ");
for (i = 0; i < MAX_PROCESS; i++) {
printf("P%d ", safe_sequence[i]);
}
printf("\n");
} else {
printf("The system is not in safe state.\n");
}
return 0;
}
```