Реализация Алгоритма Банкира не дает безопасной последовательности

Я пытаюсь реализовать алгоритм банкира для предотвращения тупиков на языке Си. На вход этого кода выделяются ресурсы и матрица максимальных требований для каждого процесса. До части расчета матрицы необходим код, но он не генерирует безопасную последовательность. Приложение останавливается после ввода данных. Что-то не так с логикой или какой-то другой ошибкой?

#include <stdio.h>
int alloc[5][5], max[5][5],need[5][5], avail[5];
int seq[5];
int res[5], comp[5], safe = 0;
int count = 0, i, j, exec, r, p, s = 0;

int main()
{
  printf("\nEnter number of processes: ");
  scanf("%d", &p);

  for (i = 0; i < p; i++)
  {
    comp[i] = 0;
    count++;
  }

  printf("\nEnter number of resources: ");
  scanf("%d", &r);

  printf("\nEnter Availabe Instances:");
  for (i = 0; i < r; i++)
  {
    scanf("%d", &res[i]);
  }

  printf("\nEnter Allocated matrix:\n");
  for (i = 0; i < p; i++)
  {
    for(j = 0; j < r; j++)
    {
      scanf("%d", &alloc[i][j]);
    }
  }

  printf("\nEnter Maximum Claim Table:\n");
  for (i = 0; i < p; i++)
  {
    for(j = 0; j < r; j++)
    {
        scanf("%d", &max[i][j]);
    }
  }

  printf("\nThe Need matrix is:\n");
  for (i = 0; i < p; i++)
  {
    for (j = 0; j < r; j++)
    {
      need[i][j]=max[i][j]-alloc[i][j];
      printf("\t%d", need[i][j]);
    }
    printf("\n");
  }

  while (count != 0)
  {
    safe = 0;
    for (i = 0; i < p; i++)
    {
      if (comp[i]!=1)
      {
        exec = 1;
        for (j = 0; j < r; j++)
        {
          if (need[i][j] > avail[j])
          {
            exec = 0;
            break;
          }
        }
        if (exec==1)
        {
          s++;
          seq[s]= i + 1;
          comp[i] = 1;
          count--;
          safe = 1;

          for (j = 0; j < r; j++)
          {
            avail[j] += alloc[i][j];
          }
          break;
        }
      }
    }
    if (!safe)
    {
      printf("\nThe processes are in unsafe state.\n");
      break;
    }
  }
  for(i=1;i<=s;i++)
    printf("%d",seq[i]);
  return 0;
}

0 ответов

Другие вопросы по тегам