Advertisement
JavierGumin

Bankers Algorithm (tugas lab)

Jun 4th, 2025
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.96 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main() {
  5.     int n, m;
  6.     scanf("%d %d", &n, &m);
  7.  
  8.     int allocation[n][m];
  9.     int max[n][m];
  10.     int need[n][m];
  11.     int id[n];
  12.     int available[m];
  13.  
  14.     // Membaca data proses
  15.     for (int i = 0; i < n; i++) {
  16.         scanf("%d", &id[i]);
  17.         for (int j = 0; j < m; j++) {
  18.             scanf("%d", &allocation[i][j]);
  19.         }
  20.         for (int j = 0; j < m; j++) {
  21.             scanf("%d", &max[i][j]);
  22.             need[i][j] = max[i][j] - allocation[i][j];
  23.         }
  24.     }
  25.  
  26.     // Membaca available matrix
  27.     for (int j = 0; j < m; j++) {
  28.         scanf("%d", &available[j]);
  29.     }
  30.  
  31.     // Menyiapkan work dan finish
  32.     int work[m];
  33.     memcpy(work, available, sizeof(int) * m);
  34.  
  35.     int finish[n];
  36.     memset(finish, 0, sizeof(int) * n);
  37.  
  38.     int safe_sequence[n];
  39.     int safe_count = 0;
  40.     int found;
  41.  
  42.     // Simulasi Algoritma Banker
  43.     do {
  44.         found = 0;
  45.         for (int i = 0; i < n; i++) {
  46.             if (!finish[i]) {
  47.                 int can_allocate = 1;
  48.                 for (int j = 0; j < m; j++) {
  49.                     if (need[i][j] > work[j]) {
  50.                         can_allocate = 0;
  51.                         break;
  52.                     }
  53.                 }
  54.                 if (can_allocate) {
  55.                     for (int j = 0; j < m; j++) {
  56.                         work[j] += allocation[i][j];
  57.                     }
  58.                     finish[i] = 1;
  59.                     safe_sequence[safe_count++] = id[i];
  60.                     found = 1;
  61.                     break;
  62.                 }
  63.             }
  64.         }
  65.     } while (found);
  66.  
  67.     // Output Need matrix
  68.     printf("Need matrix\n");
  69.     for (int i = 0; i < n; i++) {
  70.         printf("%d ", id[i]);
  71.         for (int j = 0; j < m; j++) {
  72.             printf("%d", need[i][j]);
  73.             if (j < m - 1) {
  74.                 printf(" ");
  75.             }
  76.         }
  77.         printf("\n");
  78.     }
  79.  
  80.     // Cek apakah semua proses selesai
  81.     int all_finished = 1;
  82.     for (int i = 0; i < n; i++) {
  83.         if (!finish[i]) {
  84.             all_finished = 0;
  85.             break;
  86.         }
  87.     }
  88.  
  89.     // Output hasil
  90.     if (all_finished) {
  91.         printf("Safe sequences? Yes.\n");
  92.         printf("What is the safe sequences? ");
  93.         for (int i = 0; i < safe_count; i++) {
  94.             printf("%d", safe_sequence[i]);
  95.             if (i != safe_count - 1) {
  96.                 printf(" -> ");
  97.             }
  98.         }
  99.         printf(".\n");
  100.     } else {
  101.         printf("Safe sequences? No.\n");
  102.         printf("What process can be done before deadlock? ");
  103.         if (safe_count == 0) {
  104.             printf("None.\n");
  105.         } else {
  106.             for (int i = 0; i < safe_count; i++) {
  107.                 printf("%d", safe_sequence[i]);
  108.                 if (i != safe_count - 1) {
  109.                     printf(", ");
  110.                 }
  111.             }
  112.             printf(".\n");
  113.         }
  114.     }
  115.  
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement