Professional Documents
Culture Documents
Assign Main
Assign Main
Assign Main
h>
//******************************************************************
for(i=0;i<vertex;i++)
{
if(i==l1)
{
for(j=0;j<vertexby2;j++)
{
if(matrix[l1][j]==1)
{
array[k]=j;
k=k+1;
imprCost[j]=imprCost[j]+(2*matrix[j][l1]) - (2*matrix[j][l3]);
}
}
for(j=vertexby2;j<vertex;j++)
{
if(matrix[l1][j]==1)
{
array[k]=j;
k=k+1;
imprCost[j]=imprCost[j]+(2*matrix[j][l3]) - (2*matrix[j][l1]);
}
}
if(i==l3){
for(j=0;j<vertexby2;j++)
{
for( m=0;m<k;m++)
{
if(j!=m)
{
if(matrix[l3][j]==1)
{
imprCost[j]=imprCost[j]+(2*matrix[j][l1]) - (2*matrix[j]
[l3]);
}
}
}
for(j=vertexby2 ;j<vertex;j++)
{
for( m=0;m<k;m++)
{
if(j!=m)
{
if(matrix[l3][j]==1)
{
imprCost[j]=imprCost[j]+(2*matrix[j][l3]) - (2*matrix[j][l1]);
}
}
return(imprCost);
}
//******************************************************************
for(i=0;i<vertex;i++)
{
//storing element indices to array for Part1 and Part2
a[i]=i;
c[i]=i;
}
for(i=0;i<flag1;i++)
{
for(j=0;j<vertexby2;j++)
{
if(l1[i]==a[j])
a[j]=-1;
if(l2[i]==c[j])
c[j]=-1;
}
}
k=0;m=0;
for(j=0;j<vertexby2;j++)
{
if(a[j]!=-1){
b[k]=a[j];
k=k+1;
}
if(c[j]!=-1){
d[m]=c[j];
m=m+1;
}
}
{
for(i=0;i<(vertexby2-flag1);i++)
{ k=0;
for(j=vertexby2;j<(vertex-flag2);j++)
{
gain[b[i]][d[k]]=imprCost[b[i]]+imprCost[d[j-vertexby2] + vertexby2]-
(2*matrix[b[i]][d[j-vertexby2]+vertexby2]);
k++;
}
}
if(flag1==0)
{
for(i=0;i<(vertexby2-flag1);i++)
{ k=0;
for(j=0;j<(vertexby2-flag2);j++)
{
if(check==0) {
maximum = gain[b[i]][d[j]];
check++;
}
if ( gain[b[i]][d[j]] >= maximum )
{
maximum = gain[b[i]][d[j]];
location1=b[i];
location2=d[j];
}
}
}
int array[]={location1,location2,maximum};
return(array);
//********************************************************************
imprCost[i]=extCost[i]-intCost[i];
}
return (imprCost);
//
//********************************************************************
int main()
{
int
i=0,j=0,k=0,flag1=0,flag2=0,x=0,y=0,location1=0,location2=0,q=0,vertex=0,vertexby2=
0;
int part1[100], part2[100];
int copypart1[100];
int copypart2[100];
}
printf("\n");
//for(i=0;i<vertex;i++)
//{
// for(j=0;j<vertex;j++)
// {
// printf(" [%d][%d] element is : ",i,j);
// scanf("%d", &matrix[i][j]);
// }
//}
int matrix[100][100]={
{ 0,1,1,1,0,0},
{ 1,0,0,0,0,0},
{ 1,0,0,0,1,1},
{ 1,0,0,0,0,0},
{ 0,0,1,0,0,1},
{ 0,0,1,0,1,0}
};
for(i=0;i<vertex;i++)
{
for(j=0;j<vertex;j++)
{
k=vertexby2;
//**************************************
//calculate D, E I
for(i=0;i<vertex;i++)
{
imprCost[i]=*p;
p=p+1;
printf("%d ",imprCost[i]);
}
//*****************************
while(k>0)
{
int maximum_gain=0;
int * q= calculate_gain(imprCost,vertex,matrix,l1,l2,flag1,flag2);
location1=*q;
location2=*(q+1);
maximum_gain=*(q+2);
l1[x]=location1;
flag1++;
l2[y]=location2;
flag2++;
G[x]=G[x]+maximum_gain;
x++;
y++;
for(i=0;i<vertex;i++)
{
imprCost[i]=*r;
r=r+1;
printf(" %d ",imprCost[i]);
}
printf("\n\n");
int location3=(vertexby2)+location2;
for(i=0;i<vertex;i++)
{
matrix[location1][i]=0;
matrix[location3][i]=0;
matrix[i][location1]=0;
matrix[i][location3]=0;
}
imprCost[location1]=0;
imprCost[location3]=0;
k=k-1;
int max=G[0];
j=0;
for(i=0;i<vertexby2;i++)
{
if(G[i]>max)
{
max=G[i];
}
}
for(i=0;i<vertexby2;i++)
{
if(G[i]==max)
{
if(G[i]>0)
{
i=j;
printf("\nCumilative Maximum Gain is: %d\n", max);
printf("\n Maximum Gain is found for k= %d\n",(i+1));
printf("\nvertex %d from Partition A and %d from partition2 will be swaped
for least cut",part1[l1[j]],(part2[l2[j]]));
copypart1[l1[j]]=part2[l2[j]];
copypart2[l2[j]]=part1[l1[j]];
}
printf("\n");
}
else
{
printf("No Improvement Found");
}
}
}