#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int max(int a[]);
int min(int a[10][10],char fx, int rc,int n);
int cal_diff(int a[10][10],int rc,char ch, int n);
void main()
{
int vam[10][10],v[10][10],avail[11][10],av[10],demand[11][10],dm[10];
int avdf[11][10],dmdf[11][10],rs[10][10];
int row,col,r,c,chk1=0,chk2=0;
int i,j,k,brk,cost=0,it=0;
clrscr();
printf("\n \t VAM\n");
printf("\n Enter the number of rows=");
scanf("%d",&row);
printf("\n Enter the number of columns=");
scanf("%d",&col);
printf("\n Enter the matrix=");
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
scanf("%d",&vam[i][j]);
v[i][j]=vam[i][j];
rs[i][j]=0;
}
}
printf("\n Enter the Availabilities= ");
for(i=0;i<row;i++)
{
scanf("%d",&av[i]);
chk1+=av[i];
}
printf("\n Enter the Demands=");
for(i=0;i<col;i++)
{
scanf("%d",&dm[i]);
chk2+=dm[i];
}
if(chk1!=chk2)
{
printf("\n The problem is unbalanced......\n");
exit(0);
}
for(i=0;i<11;i++)
{
for(j=0;j<10;j++)
{
avdf[i][j]=0;
dmdf[i][j]=0;
}
}
brk;
while(brk!=row*col)
{
for(i=0;i<row;i++)
{
avail[it][i]=av[i];
}
for(i=0;i<col;i++)
{
demand[it][i]=dm[i];
}
for(i=0;i<col;i++)
dmdf[it][i]=cal_diff(v,i,'r',col);
r=max(avdf[it]);
c=max(dmdf[it]);
if(avdf[it][r]>=dmdf[it][c])
{
c=min(v,'r',r,col);
for(i=0;i<col;i++)
v[r][i]=-1;
}
else
{
r=min(v,'c',c,row);
for(i=0;i<row;i++)
v[i][c]=-1;
}
if(av[r]>dm[c])
{
rs[r][c]=dm[c];
av[r]=av[r]-dm[c];
dm[c]=0;
}
else
{
rs[r][c]=av[r];
dm[c]=dm[c]-av[r];
av[r]=0;
}
it++;
brk=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(v[i][j]==-1)
brk++;
}
}
}
printf("\n The VAM table is .....\n\n");
for(i=1;i<=col;i++)
printf("\t D %d",i);
printf("\t Available\n\n");
for(i=0;i<row;i++)
{
printf("S%d",i+1);
for(j=0;j<col;j++)
printf("\t %d",vam[i][j]);
for(j=0;j<row;j++)
printf("\t %d(%d)",avail[j][i]);
avdf[j][i];
printf("\n");
for(j=0;j<col;j++)
{
printf("\t %d",rs[i][j]);
cost=cost+vam[i][j]*rs[i][j];
}
printf("\n");
}
printf("Demands");
for(j=0;j<it;j++)
{
for(i=0;i<col;i++)
printf("\t %d(%d)",demand[j][i],dmdf[j][i]);
printf("\n\n");
}
printf("\nThe cost is = %d",cost);
getch();
}
int max(int a[])
{
int t=a[0],l=0,i;
for(i=0;i<10;i++)
if(a[i]>t)
{
t=a[i];
l=i;
}
return l;
}
int cal_diff(int a[10][10],int rc,char ch, int n)
{
int i,l,t1=0,t2=0;
if(ch=='r')
{
for(i=0;i<n;i++)
if(a[rc][i]!=-1)
{
l=i;
t1=t2=a[rc][i];
break;
}
for(i=0;i<n;i++)
if(a[rc][i]<t1 && a[rc][i]!=-1)
{
t1=a[rc][i];
l=i;
}
for(i=0;i<n;i++)
if(a[rc][i]>t1)
{
t2=a[rc][i];
break;
}
for(i=0;i<n;i++)
if(a[rc][i]<t2 && i!=1 && a[rc][i]!=1)
t2=a[rc][i];
}
else
{
for(i=0;i<n;i++)
if(a[i][rc]!=-1)
{
l=i;
t1=t2=a[i][rc];
break;
}
for(;i<n;i++)
if(a[i][rc]<t1 && a[i][rc]!=-1)
{
t1=a[i][rc];
l=i;
}
for(i=0;i<n;i++)
if(a[i][rc]>t1)
{
t2=a[i][rc];
break;
}
for(i=0;i<n;i++)
if(a[i][rc]<t2 && i!=1 && a[i][rc]!=-1)
t2=a[i][rc];
}
return(t2-t1);
}
int min(int a[10][10],char fx, int rc,int n)
{
int i,l,t;
if(fx=='r')
{
for(i=0;i<n;i++)
if(a[rc][i]!=-1)
break;
l=i;t=a[rc][l];
for(i=1;i<n;i++)
if(a[rc][i]<t && a[rc][i]!=-1)
{
t=a[rc][i];l=i;
}
}
else
{
for(i=0;i<n;i++)
if(a[i][rc]!=-1)
break;
l=i;t=a[l][rc];
for(i=1;i<n;i++)
if(a[i][rc]<t && a[i][rc]!=-1)
{
t=a[i][rc];
l=i;
}
}
return 1;
}
#include<conio.h>
#include<stdlib.h>
int max(int a[]);
int min(int a[10][10],char fx, int rc,int n);
int cal_diff(int a[10][10],int rc,char ch, int n);
void main()
{
int vam[10][10],v[10][10],avail[11][10],av[10],demand[11][10],dm[10];
int avdf[11][10],dmdf[11][10],rs[10][10];
int row,col,r,c,chk1=0,chk2=0;
int i,j,k,brk,cost=0,it=0;
clrscr();
printf("\n \t VAM\n");
printf("\n Enter the number of rows=");
scanf("%d",&row);
printf("\n Enter the number of columns=");
scanf("%d",&col);
printf("\n Enter the matrix=");
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
scanf("%d",&vam[i][j]);
v[i][j]=vam[i][j];
rs[i][j]=0;
}
}
printf("\n Enter the Availabilities= ");
for(i=0;i<row;i++)
{
scanf("%d",&av[i]);
chk1+=av[i];
}
printf("\n Enter the Demands=");
for(i=0;i<col;i++)
{
scanf("%d",&dm[i]);
chk2+=dm[i];
}
if(chk1!=chk2)
{
printf("\n The problem is unbalanced......\n");
exit(0);
}
for(i=0;i<11;i++)
{
for(j=0;j<10;j++)
{
avdf[i][j]=0;
dmdf[i][j]=0;
}
}
brk;
while(brk!=row*col)
{
for(i=0;i<row;i++)
{
avail[it][i]=av[i];
}
for(i=0;i<col;i++)
{
demand[it][i]=dm[i];
}
for(i=0;i<col;i++)
dmdf[it][i]=cal_diff(v,i,'r',col);
r=max(avdf[it]);
c=max(dmdf[it]);
if(avdf[it][r]>=dmdf[it][c])
{
c=min(v,'r',r,col);
for(i=0;i<col;i++)
v[r][i]=-1;
}
else
{
r=min(v,'c',c,row);
for(i=0;i<row;i++)
v[i][c]=-1;
}
if(av[r]>dm[c])
{
rs[r][c]=dm[c];
av[r]=av[r]-dm[c];
dm[c]=0;
}
else
{
rs[r][c]=av[r];
dm[c]=dm[c]-av[r];
av[r]=0;
}
it++;
brk=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(v[i][j]==-1)
brk++;
}
}
}
printf("\n The VAM table is .....\n\n");
for(i=1;i<=col;i++)
printf("\t D %d",i);
printf("\t Available\n\n");
for(i=0;i<row;i++)
{
printf("S%d",i+1);
for(j=0;j<col;j++)
printf("\t %d",vam[i][j]);
for(j=0;j<row;j++)
printf("\t %d(%d)",avail[j][i]);
avdf[j][i];
printf("\n");
for(j=0;j<col;j++)
{
printf("\t %d",rs[i][j]);
cost=cost+vam[i][j]*rs[i][j];
}
printf("\n");
}
printf("Demands");
for(j=0;j<it;j++)
{
for(i=0;i<col;i++)
printf("\t %d(%d)",demand[j][i],dmdf[j][i]);
printf("\n\n");
}
printf("\nThe cost is = %d",cost);
getch();
}
int max(int a[])
{
int t=a[0],l=0,i;
for(i=0;i<10;i++)
if(a[i]>t)
{
t=a[i];
l=i;
}
return l;
}
int cal_diff(int a[10][10],int rc,char ch, int n)
{
int i,l,t1=0,t2=0;
if(ch=='r')
{
for(i=0;i<n;i++)
if(a[rc][i]!=-1)
{
l=i;
t1=t2=a[rc][i];
break;
}
for(i=0;i<n;i++)
if(a[rc][i]<t1 && a[rc][i]!=-1)
{
t1=a[rc][i];
l=i;
}
for(i=0;i<n;i++)
if(a[rc][i]>t1)
{
t2=a[rc][i];
break;
}
for(i=0;i<n;i++)
if(a[rc][i]<t2 && i!=1 && a[rc][i]!=1)
t2=a[rc][i];
}
else
{
for(i=0;i<n;i++)
if(a[i][rc]!=-1)
{
l=i;
t1=t2=a[i][rc];
break;
}
for(;i<n;i++)
if(a[i][rc]<t1 && a[i][rc]!=-1)
{
t1=a[i][rc];
l=i;
}
for(i=0;i<n;i++)
if(a[i][rc]>t1)
{
t2=a[i][rc];
break;
}
for(i=0;i<n;i++)
if(a[i][rc]<t2 && i!=1 && a[i][rc]!=-1)
t2=a[i][rc];
}
return(t2-t1);
}
int min(int a[10][10],char fx, int rc,int n)
{
int i,l,t;
if(fx=='r')
{
for(i=0;i<n;i++)
if(a[rc][i]!=-1)
break;
l=i;t=a[rc][l];
for(i=1;i<n;i++)
if(a[rc][i]<t && a[rc][i]!=-1)
{
t=a[rc][i];l=i;
}
}
else
{
for(i=0;i<n;i++)
if(a[i][rc]!=-1)
break;
l=i;t=a[l][rc];
for(i=1;i<n;i++)
if(a[i][rc]<t && a[i][rc]!=-1)
{
t=a[i][rc];
l=i;
}
}
return 1;
}
No comments:
Post a Comment