Реализация Алгоритма Банкира не дает безопасной последовательности
Я пытаюсь реализовать алгоритм банкира для предотвращения тупиков на языке Си. На вход этого кода выделяются ресурсы и матрица максимальных требований для каждого процесса. До части расчета матрицы необходим код, но он не генерирует безопасную последовательность. Приложение останавливается после ввода данных. Что-то не так с логикой или какой-то другой ошибкой?
#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;
}