Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- int main() {
- int n, m;
- scanf("%d %d", &n, &m);
- int allocation[n][m];
- int max[n][m];
- int need[n][m];
- int id[n];
- int available[m];
- // Membaca data proses
- for (int i = 0; i < n; i++) {
- scanf("%d", &id[i]);
- for (int j = 0; j < m; j++) {
- scanf("%d", &allocation[i][j]);
- }
- for (int j = 0; j < m; j++) {
- scanf("%d", &max[i][j]);
- need[i][j] = max[i][j] - allocation[i][j];
- }
- }
- // Membaca available matrix
- for (int j = 0; j < m; j++) {
- scanf("%d", &available[j]);
- }
- // Menyiapkan work dan finish
- int work[m];
- memcpy(work, available, sizeof(int) * m);
- int finish[n];
- memset(finish, 0, sizeof(int) * n);
- int safe_sequence[n];
- int safe_count = 0;
- int found;
- // Simulasi Algoritma Banker
- do {
- found = 0;
- for (int i = 0; i < n; i++) {
- if (!finish[i]) {
- int can_allocate = 1;
- for (int j = 0; j < m; j++) {
- if (need[i][j] > work[j]) {
- can_allocate = 0;
- break;
- }
- }
- if (can_allocate) {
- for (int j = 0; j < m; j++) {
- work[j] += allocation[i][j];
- }
- finish[i] = 1;
- safe_sequence[safe_count++] = id[i];
- found = 1;
- break;
- }
- }
- }
- } while (found);
- // Output Need matrix
- printf("Need matrix\n");
- for (int i = 0; i < n; i++) {
- printf("%d ", id[i]);
- for (int j = 0; j < m; j++) {
- printf("%d", need[i][j]);
- if (j < m - 1) {
- printf(" ");
- }
- }
- printf("\n");
- }
- // Cek apakah semua proses selesai
- int all_finished = 1;
- for (int i = 0; i < n; i++) {
- if (!finish[i]) {
- all_finished = 0;
- break;
- }
- }
- // Output hasil
- if (all_finished) {
- printf("Safe sequences? Yes.\n");
- printf("What is the safe sequences? ");
- for (int i = 0; i < safe_count; i++) {
- printf("%d", safe_sequence[i]);
- if (i != safe_count - 1) {
- printf(" -> ");
- }
- }
- printf(".\n");
- } else {
- printf("Safe sequences? No.\n");
- printf("What process can be done before deadlock? ");
- if (safe_count == 0) {
- printf("None.\n");
- } else {
- for (int i = 0; i < safe_count; i++) {
- printf("%d", safe_sequence[i]);
- if (i != safe_count - 1) {
- printf(", ");
- }
- }
- printf(".\n");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement