Skip to content

Instantly share code, notes, and snippets.

@Nikheel001
Created September 26, 2017 05:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nikheel001/b98d89bd62e527737a180e44ad8e12bd to your computer and use it in GitHub Desktop.
Save Nikheel001/b98d89bd62e527737a180e44ad8e12bd to your computer and use it in GitHub Desktop.
#include<stdio.h>
#define n 4
#define m 3
int Cmat[n][m]={3,2,2,6,1,3,3,1,4,4,2,2};
int Amat[n][m]={1,0,0,6,1,2,2,1,1,0,0,2};
int NEED[n][m]={2,2,2,0,0,1,1,0,3,4,2,0};
int R[m] = {9,3,6};
int AV[m] = {0,1,1};
int skip[n]={0,0,0,0};
struct banker
{
int r[m];
int av[m];
int cl[n][m];
int al[n][m];
};
void res_req_algo(struct banker abc);
int done();
int safe(struct banker S);
void main()
{
int i=0,j=0;
struct banker abc;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
abc.r[j] = R[j];
abc.av[j] = AV[j];
abc.cl[i][j] = Cmat[i][j];
abc.al[i][j] = Amat[i][j];
}
}
res_req_algo(abc);
for(i=0;i<n;i++)
printf("%d",skip[i]);
}
void res_req_algo(struct banker abc)
{
while(done())
{
int flag1 = 1,flag2,i=0,j=0;
struct banker tmp,nabc;
tmp = abc;
for(j=0;j<3;j++)
{
if(abc.al[i][j]+NEED[i][j]>abc.cl[i][j])
{
flag1 = 0;
break;
}
}
flag2=1;
for(j=0;j<3;j++)
{
if(NEED[i][j]>abc.av[j])
{
flag2 = 0;
break;
}
}
if(flag1)
{
return;
}
else if(flag2)
{
if(i != n)
i++;
else
i=0;
}
else
{
nabc = abc;
for(j=0;j<m;j++)
{
nabc.al[i][j] += NEED[i][j];
nabc.av[j] -= NEED[i][j];
}
}
if(safe(nabc))
{
abc = nabc;
skip[i] =1;
for(j=0;j<m;j++)
{
abc.av[j] += abc.al[i][j];
abc.cl[i][j] = 0;
NEED[i][j] = 0;
abc.al[i][j] = 0;
}
printf("%d \t",i);
}
else
{
abc = tmp;
if(i != n)
i++;
else
i=0;
}
printf("In");
}
}
int done()
{
int k,sum=0;
for(k=0;k<n;k++)
{
if(skip[k] == 1)
sum++;
}
printf("%d\n",sum);
if(sum == 4)
return 0;
else
return 1;
}
int safe(struct banker S)
{
int cav[m],i=0,j=0,pos=1,flag2 = 0;
for(j=0;j<m;j++)
{
cav[j] = S.av[j];
}
while(pos)
{
for(i=0;i<n;i++)
{
if(skip[i] != 1)
{
for(j=0;j<m;j++)
{
if(S.cl[i][j] - S.al[i][j] <= cav[j])
{
flag2 =1;
break;
}
}
}
}
if(flag2)
{
for(j=0;j<m;j++)
{
cav[j] += S.al[i][j];
}
skip[i] = 1;
}
else
pos = 0;
}
return (done());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment