银行家算法python代码
时间: 2023-10-13 16:23:54 浏览: 95
以下是一个简单的 Python 实现银行家算法的代码:
```python
n_proc = int(input("请输入进程数:"))
n_res = int(input("请输入资源种类数:"))
# 最大需求矩阵,max_req[i][j]表示第i个进程对第j种资源的最大需求量
max_req = []
for i in range(n_proc):
max_req.append(list(map(int, input("请输入进程{}的最大需求量:".format(i)).split())))
# 已分配矩阵,alloc[i][j]表示第i个进程已被分配第j种资源的数量
alloc = []
for i in range(n_proc):
alloc.append(list(map(int, input("请输入进程{}已分配的数量:".format(i)).split())))
# 可用资源向量,avail[j]表示系统中剩余的第j种资源的数量
avail = list(map(int, input("请输入系统中剩余的资源数量:").split()))
# 计算需求矩阵, need[i][j]表示第i个进程还需要第j种资源的数量
need = []
for i in range(n_proc):
need.append([max_req[i][j] - alloc[i][j] for j in range(n_res)])
# 存储安全序列
safe_seq = []
# 存储已完成进程的数量
finished = [False] * n_proc
# 循环查找安全序列
while False in finished:
# 查找满足需求的进程
found = False
for i in range(n_proc):
if not finished[i] and all(need[i][j] <= avail[j] for j in range(n_res)):
found = True
finished[i] = True
safe_seq.append(i)
for j in range(n_res):
avail[j] += alloc[i][j]
break
if not found:
print("无法找到安全序列!")
break
print("安全序列为:", safe_seq)
```
在这段代码中,`max_req`、`alloc` 和 `avail` 分别表示最大需求矩阵、已分配矩阵和可用资源向量。通过计算出需求矩阵 `need`,然后循环查找满足需求的进程,直到找到安全序列或无法找到安全序列为止。最终输出安全序列。
阅读全文