#include<stdbool.h>#include<stdio.h>#defineMAX_PROCESSES100#defineMAX_RESOURCES100// Function to check if a process can be executed with available resourcesbool canExecute(int process,int*available,int request[MAX_PROCESSES][MAX_RESOURCES],int allocation[MAX_PROCESSES][MAX_RESOURCES],int n_resources){// Check if all resources needed by the process are availablefor(int j =0; j < n_resources; j++){if(request[process][j]> available[j])return false;}return true;}// Function to detect deadlock using resource allocation graph approachvoiddetectDeadlock(int n_processes,int n_resources,int allocation[MAX_PROCESSES][MAX_RESOURCES],int request[MAX_PROCESSES][MAX_RESOURCES],int*available){// Initialize work array equal to available resourcesint work[MAX_RESOURCES];for(int i =0; i < n_resources; i++){ work[i]= available[i];}// Initialize finish array for each process bool finish[MAX_PROCESSES]={false};// Find an unfinished process that can execute with current work resources bool found;do{ found = false;for(int i =0; i < n_processes; i++){if(!finish[i]&&canExecute(i, work, request, allocation, n_resources)){// Process i can complete execution found = true; finish[i]= true;// Release allocated resourcesfor(int j =0; j < n_resources; j++){ work[j]+= allocation[i][j];}break;}}}while(found);// Check for deadlock bool deadlock = false;printf("\nDeadlock Detection Result:\n");for(int i =0; i < n_processes; i++){if(!finish[i]){if(!deadlock){printf("System is in deadlock state.\n");printf("Deadlocked processes: "); deadlock = true;}printf("P%d ", i);}}if(!deadlock){printf("No deadlock detected in the system.\n");}else{printf("\n");}}intmain(){int n_processes, n_resources;int allocation[MAX_PROCESSES][MAX_RESOURCES];int request[MAX_PROCESSES][MAX_RESOURCES];int available[MAX_RESOURCES];// Get number of processes and resourcesprintf("Enter number of processes: ");scanf("%d",&n_processes);printf("Enter number of resources: ");scanf("%d",&n_resources);// Input validationif(n_processes > MAX_PROCESSES || n_resources > MAX_RESOURCES){printf("Error: Number of processes or resources exceeds maximum limit.\n");return1;}// Input allocation matrixprintf("\nEnter allocation matrix:\n");for(int i =0; i < n_processes; i++){printf("For process P%d: ", i);for(int j =0; j < n_resources; j++){scanf("%d",&allocation[i][j]);}}// Input request matrixprintf("\nEnter request matrix:\n");for(int i =0; i < n_processes; i++){printf("For process P%d: ", i);for(int j =0; j < n_resources; j++){scanf("%d",&request[i][j]);}}// Input available resourcesprintf("\nEnter available resources: ");for(int i =0; i < n_resources; i++){scanf("%d",&available[i]);}// Call deadlock detection functiondetectDeadlock(n_processes, n_resources, allocation, request, available);return0;}