#include
using namespace std;
#define MAXN 100
int used[MAXN], cnt, n, m;
int work[MAXN], allocation[MAXN][MAXN], request[MAXN][MAXN];
int dfs(int np) {
int i, j;
if (cnt == 0) return 1;
for (i = 0; i < n; i++) {
if (!used[i]) {
for (j = 0; j < m; j++) {
if (request[i][j] > work[j]) {
break;
}
}
}
}
if (j == m) {
for (j = 0; j < m; j++) {
work[j] += allocation[i][j];
used[i] = 1;
cnt--;
if (dfs(i)) {
return 1;
}
cnt++;
used[i] = 0;
work[j] -= allocation[i][j];
}
}
return 0;
}
int main() {
int i, j, k, l;
puts("资源总数:");
scanf("%d", &m);
puts("进程总数:");
scanf("%d", &n);
for (i = 0; i < m; i++) {
printf("第%d个资源剩余数量:", i + 1);
scanf("%d", &work[i]);
}
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
printf("第%d个进程请求第%d个资源的数量:", i + 1, j + 1);
scanf("%d", &request[i][j]);
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
printf("已经分配给第%d个进程第%d个资源的数量:", i + 1, j + 1);
scanf("%d", &allocation[i][j]);
}
}
for (i = 0; i < n; i++) {
memset(used, 0, sizeof(used));
cnt = n;
if (dfs(i)) {
break;
}
}
if (i < n) {
puts("No deadlock!");
} else {
puts("Deadlock!");
}
system("pause");
}
本文来源:https://www.2haoxitong.net/k/doc/a74139737fd5360cba1adbe6.html
文档为doc格式