Created
September 26, 2017 05:03
-
-
Save Nikheel001/b98d89bd62e527737a180e44ad8e12bd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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