double Solve(const int &row_reduction_times) { ColumnReduction(); std::vector<int> init_freeRows; ReductionTransfer(init_freeRows); std::vector<int> freeRows; AugmentingRowReduction(init_freeRows, freeRows); for(int time=1 ; time<row_reduction_times ; time++) { std::vector<int> tmp_freeRows(freeRows); freeRows.clear(); AugmentingRowReduction(tmp_freeRows, freeRows); } Augmentation(freeRows); CheckAssignments(); /// double cost = 0.0; for(int row=1 ; row<=n_ ; row++) { int col = x_(row-1); u_(row-1) = cost_mat_(row-1, col-1) - v_(col-1); cost += u_(row-1) + v_(col-1); } return cost; }
main(){ Edge[16][20]=25.0; Edge[20][21]=15.0; Edge[21][22]=10.0; Edge[22][23]=5.0; Edge[23][0]=3.0; Edge[16][17]=35.0; Edge[20][12]=16.0; Edge[21][14]=6.0; Edge[22][9]=8.0; Edge[23][2]=3.0; Edge[0][1]=2.0; Edge[17][12]=12.0; Edge[12][14]=8.0; Edge[14][9]=6.0; Edge[9][2]=7.0; Edge[2][1]=4.0; Edge[17][18]=20.0; Edge[12][15]=10.0; Edge[14][10]=4.0; Edge[9][4]=5.0; Edge[2][3]=5.0; Edge[1][7]=9.0; Edge[18][15]=15.0; Edge[15][10]=3.0; Edge[10][4]=7.0; Edge[4][3]=5.0; Edge[3][7]=10.0; Edge[18][19]=4.0; Edge[15][11]=30.0; Edge[10][13]=12.0; Edge[4][5]=2.0; Edge[3][6]=12.0; Edge[7][8]=20.0; Edge[19][11]=5.0; Edge[11][13]=10.0; Edge[13][5]=15.0; Edge[5][6]=25.0; Edge[6][8]=35.0; int i,j; //int cut[V]={0}; double temp=100000.0; double cEdge[V][V]={0.0}; double* cedge=&cEdge[0][0]; for(i=0;i<V;i++) for(j=0;j<V;j++) cEdge[i][j]=Edge[i][j]; int* rsPath = Augmentation(); // printf("\n\n"); // for(i=0;i<V;i++) // printf("%d\t",*(rsPath+i)); for(i=0;i<V-1;i++){ if(*(rsPath+i+1)>-1 && temp>Edge[*(rsPath+i)][*(rsPath+i+1)]) temp=Edge[*(rsPath+i)][*(rsPath+i+1)]; else if(*(rsPath+1)<=-1){ printf("No Initial Solution Found! Program Stops!\n"); exit(1); } //printf("%d\n",temp); } maxFlow+=temp; while(*(rsPath+1)>-1){ for(i=0;i<V-1;i++){ if(*(rsPath+i+1)>-1){ Edge[*(rsPath+i)][*(rsPath+i+1)]=Edge[*(rsPath+i)][*(rsPath+i+1)]-temp; Edge[*(rsPath+i+1)][*(rsPath+i)]=Edge[*(rsPath+i+1)][*(rsPath+i)]+temp; //printf("Edge[%d][%d]=%d\n",i,j,Edge[i][j]); } } for(i=0;i<V;i++) // //printf("\n"); printf("%d\t",*(rsPath+i)); // //printf("\n"); // } printf("\nadded flow value: %lf\n",temp); rsPath=NULL; rsPath=Augmentation(); temp=100000.0; for(i=0;i<V-1;i++) if(*(rsPath+i+1)>-1&&temp>Edge[*(rsPath+i)][*(rsPath+i+1)]){ temp=Edge[*(rsPath+i)][*(rsPath+i+1)]; //printf("%d temp=%d\n",i,temp); } if(*(rsPath+1)>-1) maxFlow+=temp; // else // for(i=0;i<V;i++) // for(j=;j<V;j++) // if() } // int rCut=0; printf("The max flow value is %lf\n",maxFlow); // for(i=1;i<V;i++) // if(Edge[Resource][i]==0&&cEdge[Resource][i]>0) // rCut++; // int * initialCut=malloc(rCut*sizeof(int)); // int x=0; // for(i=1;i<V;i++) // if(Edge[Resource][i]==0&&cEdge[Resource][i]>0){ // *(initialCut+x)=i; // x++; // } // int* edge=&Edge[0][0]; // int* cedge=&cEdge[0][0]; // for(i=0;i<x;i++) // cutSet(i,initialCut,edge,cedge,x); // for(i=0;i<V;i++) // for(j=0;j<V;j++) // printf("Edge[%d][%d]=%d\t",i,j,Edge[i][j]); //int* finalCut; double* edge=&Edge[0][0]; cutSetSize=1; int* initialCut=malloc(1*sizeof(int)); *(initialCut+0)=Resource; //int finalCut=0; cutSet(Resource,initialCut,edge,cedge); printf("cutsize %d\n",cutSetSize); printf("The R set includes:\n"); for(i=0;i<cutSetSize;i++) printf("%d ",*(initialCut+i)); printf("\n"); int* rBar = malloc((V-cutSetSize)*sizeof(int)); //printf("%d ",*(rBar+1)); int rBarIndex=0; double minCutValur=0.0; for(i=0;i<V;i++) for(j=0;j<cutSetSize;j++) if(*(initialCut+j)!=i){ if(j==cutSetSize-1){ *(rBar+rBarIndex)=i; rBarIndex++; printf("%d ",*(rBar+rBarIndex-1)); } } else break; for(i=0;i<V-cutSetSize;i++) for(j=0;j<cutSetSize;j++) if(Edge[*(initialCut+j)][*(rBar+i)]==0&&Edge[*(rBar+i)][*(initialCut+j)]>0&&cEdge[*(initialCut+j)][*(rBar+i)]==Edge[*(rBar+i)][*(initialCut+j)]){ minCutValur+=Edge[*(rBar+i)][*(initialCut+j)]; printf("\nThe minimum cut value is %lf\n",minCutValur); } free(initialCut); free(rBar); }
main() { Edge[0][12]=7.4524; Edge[0][78]=7.507; Edge[1][92]=2.6319; Edge[2][84]=3.9031; Edge[3][86]=4.6054; Edge[4][45]=8.1446; Edge[5][8]=6.6196; Edge[5][85]=6.2713; Edge[7][6]=0.3872; Edge[8][19]=4.3818; Edge[8][77]=5.3193; Edge[10][2]=7.8235; Edge[10][78]=8.2298; Edge[11][56]=0.0092; Edge[12][72]=5.8034; Edge[13][17]=7.921; Edge[13][72]=6.5692; Edge[14][20]=4.2781; Edge[15][11]=1.824; Edge[16][38]=2.9622; Edge[17][31]=6.456; Edge[17][93]=7.5806; Edge[19][11]=1.8966; Edge[20][68]=3.0536; Edge[21][80]=2.0546; Edge[22][43]=1.8564; Edge[23][87]=4.6364; Edge[24][94]=4.8018; Edge[26][36]=8.4837; Edge[27][61]=5.3629; Edge[28][38]=3.7939; Edge[29][14]=5.9547; Edge[30][8]=7.0785; Edge[30][85]=6.7301; Edge[31][68]=3.6235; Edge[32][55]=3.6884; Edge[33][98]=2.5446; Edge[35][12]=7.8729; Edge[35][85]=7.2926; Edge[36][45]=7.0864; Edge[36][99]=6.688; Edge[37][72]=6.3844; Edge[38][11]=1.9033; Edge[39][84]=3.3171; Edge[40][85]=5.5051; Edge[42][15]=3.1119; Edge[42][88]=3.3251; Edge[44][7]=1.5193; Edge[45][28]=5.9583; Edge[46][48]=8.0189; Edge[47][58]=8.6724; Edge[49][27]=3.5585; Edge[51][67]=4.9037; Edge[52][28]=5.4185; Edge[52][88]=4.4357; Edge[53][62]=8.2771; Edge[54][30]=8.9273; Edge[55][61]=5.5378; Edge[56][80]=2.2784; Edge[59][47]=6.809; Edge[60][39]=5.4556; Edge[61][82]=6.498; Edge[62][96]=6.4225; Edge[63][45]=8.3637; Edge[63][99]=7.9654; Edge[64][66]=3.9632; Edge[66][9]=1.3564; Edge[67][82]=6.8541; Edge[69][7]=1.0283; Edge[70][17]=7.8061; Edge[70][75]=7.7176; Edge[72][15]=3.7809; Edge[72][88]=3.9941; Edge[73][36]=8.3762; Edge[74][22]=4.4028; Edge[74][88]=4.0847; Edge[75][62]=7.4369; Edge[76][50]=9.1997; Edge[77][66]=3.291; Edge[78][39]=5.6804; Edge[79][13]=9.0445; Edge[79][73]=9.7899; Edge[80][91]=4.8575; Edge[82][71]=8.2617; Edge[84][6]=0.9589; Edge[85][31]=5.284; Edge[86][65]=7.8549; Edge[87][82]=5.946; Edge[88][44]=2.5903; Edge[89][80]=3.1996; Edge[90][78]=7.0985; Edge[92][27]=3.79; Edge[93][31]=6.2897; Edge[94][61]=5.6031; Edge[95][31]=5.6588; Edge[95][96]=5.8468; Edge[96][72]=5.2923; Edge[97][84]=2.5969; Edge[99][18]=5.545; Edge[99][96]=5.8753; Edge[0][13]=8.2181; Edge[0][90]=7.9328; Edge[1][94]=3.9022; Edge[2][96]=5.7006; Edge[3][87]=4.0019; Edge[4][53]=9.2668; Edge[5][14]=5.8352; Edge[5][95]=6.646; Edge[7][9]=0.7362; Edge[8][20]=5.0625; Edge[8][85]=5.7514; Edge[10][4]=9.5351; Edge[10][90]=8.6557; Edge[11][81]=0.8307; Edge[12][74]=5.894; Edge[13][28]=6.5028; Edge[13][74]=6.6597; Edge[14][34]=4.4385; Edge[15][43]=1.3251; Edge[16][44]=2.7415; Edge[17][36]=7.4568; Edge[17][95]=6.9497; Edge[19][15]=2.5911; Edge[20][69]=2.6396; Edge[21][83]=2.5191; Edge[22][44]=2.9085; Edge[23][91]=5.3885; Edge[25][58]=9.1107; Edge[26][52]=7.8636; Edge[27][76]=6.6585; Edge[28][39]=4.7994; Edge[29][20]=5.7019; Edge[30][14]=6.2941; Edge[30][93]=7.7358; Edge[31][69]=3.2095; Edge[32][80]=2.8079; Edge[34][15]=3.4323; Edge[35][13]=8.6386; Edge[35][93]=8.2983; Edge[36][52]=6.5466; Edge[37][2]=6.7927; Edge[37][75]=7.6477; Edge[38][21]=0.9885; Edge[39][88]=3.8166; Edge[41][46]=6.2775; Edge[42][16]=3.4762; Edge[42][97]=3.4765; Edge[44][9]=1.4527; Edge[45][39]=5.8471; Edge[46][50]=8.3243; Edge[47][71]=8.7062; Edge[49][41]=4.0528; Edge[51][80]=3.2993; Edge[52][31]=5.5458; Edge[52][96]=5.7338; Edge[53][75]=8.4102; Edge[54][35]=9.4898; Edge[55][67]=5.8938; Edge[56][87]=2.9748; Edge[59][58]=7.5019; Edge[60][42]=4.9642; Edge[61][86]=5.9572; Edge[62][99]=6.7566; Edge[63][53]=9.4859; Edge[64][14]=5.207; Edge[64][68]=3.9826; Edge[66][11]=1.5863; Edge[68][7]=1.4424; Edge[69][9]=0.9617; Edge[70][28]=6.3879; Edge[70][77]=6.202; Edge[72][16]=4.1452; Edge[72][97]=4.1455; Edge[73][52]=7.7561; Edge[74][28]=5.0675; Edge[75][2]=6.715; Edge[75][64]=6.7266; Edge[76][57]=9.0992; Edge[77][68]=3.3104; Edge[78][60]=6.4479; Edge[79][17]=8.8705; Edge[79][93]=8.7042; Edge[80][98]=3.4486; Edge[82][76]=7.7936; Edge[84][7]=1.3744; Edge[85][34]=4.8746; Edge[86][76]=7.2528; Edge[87][91]=5.5539; Edge[88][66]=2.4941; Edge[89][87]=3.896; Edge[90][99]=6.8669; Edge[92][61]=4.3328; Edge[93][34]=5.8802; Edge[94][76]=6.8987; Edge[95][39]=5.4203; Edge[96][15]=4.0299; Edge[96][74]=5.3829; Edge[98][23]=3.9796; Edge[99][22]=4.8953; Edge[99][97]=4.7285; Edge[0][18]=6.6109; Edge[0][96]=6.9413; Edge[2][16]=4.5536; Edge[2][97]=4.5538; Edge[3][94]=4.2513; Edge[4][60]=7.7531; Edge[5][20]=5.5824; Edge[6][21]=0.3643; Edge[7][21]=0.0513; Edge[8][31]=5.6324; Edge[8][96]=5.8205; Edge[10][36]=8.4768; Edge[10][99]=7.9982; Edge[12][2]=6.2118; Edge[12][85]=5.9832; Edge[13][31]=6.63; Edge[13][75]=7.8325; Edge[14][42]=4.1181; Edge[15][56]=0.6853; Edge[16][84]=2.5966; Edge[17][40]=6.6771; Edge[17][96]=6.6441; Edge[19][66]=2.3535; Edge[20][81]=2.2786; Edge[21][98]=2.0942; Edge[22][66]=2.8122; Edge[24][27]=4.5616; Edge[26][4]=9.5419; Edge[26][54]=9.799; Edge[27][82]=5.9552; Edge[28][42]=4.3079; Edge[29][31]=6.2718; Edge[30][17]=7.9021; Edge[31][14]=4.848; Edge[31][72]=5.1042; Edge[32][87]=3.5043; Edge[34][19]=3.505; Edge[35][17]=8.4646; Edge[35][95]=7.6674; Edge[36][60]=6.6949; Edge[37][12]=7.1445; Edge[37][78]=7.199; Edge[38][43]=1.4044; Edge[39][97]=3.9679; Edge[41][47]=6.8941; Edge[42][19]=3.1845; Edge[43][3]=1.5352; Edge[44][11]=1.6826; Edge[45][60]=6.6146; Edge[46][57]=8.2238; Edge[47][76]=8.2381; Edge[49][55]=3.7333; Edge[51][83]=3.7638; Edge[52][34]=5.1363; Edge[53][0]=8.7959; Edge[53][78]=7.9616; Edge[54][52]=7.8619; Edge[55][82]=6.1301; Edge[56][89]=2.069; Edge[59][67]=6.1282; Edge[60][72]=5.6332; Edge[62][2]=6.5819; Edge[63][0]=9.0314; Edge[63][60]=7.9722; Edge[64][15]=4.2008; Edge[64][72]=5.4632; Edge[66][43]=1.0874; Edge[68][9]=1.3758; Edge[69][11]=1.1916; Edge[70][29]=7.6218; Edge[70][85]=6.6341; Edge[72][18]=4.962; Edge[73][4]=9.4345; Edge[73][64]=7.7344; Edge[74][31]=5.1948; Edge[75][12]=7.0667; Edge[75][72]=6.3067; Edge[76][65]=9.099; Edge[77][69]=2.8963; Edge[78][72]=5.858; Edge[79][26]=9.8974; Edge[80][23]=3.94; Edge[81][1]=0.986; Edge[83][23]=4.4045; Edge[84][9]=1.3078; Edge[85][42]=4.5541; Edge[86][82]=6.5496; Edge[87][94]=5.0511; Edge[88][68]=2.5134; Edge[89][94]=4.1453; Edge[91][25]=7.5811; Edge[92][86]=4.3843; Edge[93][40]=6.5108; Edge[94][82]=6.1954; Edge[95][42]=4.9289; Edge[96][16]=4.3942; Edge[96][85]=5.4721; Edge[98][41]=4.6486; Edge[99][28]=5.5599; Edge[0][36]=7.754; Edge[0][99]=7.2753; Edge[2][18]=5.3703; Edge[3][24]=3.7526; Edge[4][0]=8.8122; Edge[4][62]=8.2935; Edge[5][31]=6.1523; Edge[6][32]=1.1176; Edge[7][32]=0.7021; Edge[8][34]=5.2229; Edge[9][6]=0.3206; Edge[10][37]=8.7562; Edge[11][6]=0.5505; Edge[12][18]=5.722; Edge[12][88]=4.7542; Edge[13][36]=7.6308; Edge[13][78]=7.3838; Edge[14][66]=3.2871; Edge[15][66]=2.2809; Edge[16][88]=3.096; Edge[17][52]=6.8367; Edge[18][16]=4.0639; Edge[19][68]=2.3729; Edge[20][88]=3.4851; Edge[22][6]=1.7764; Edge[22][68]=2.8316; Edge[24][41]=5.056; Edge[26][5]=8.4701; Edge[26][63]=9.7611; Edge[27][86]=5.4144; Edge[28][44]=3.5732; Edge[29][34]=5.8623; Edge[30][29]=7.7178; Edge[31][15]=3.8418; Edge[31][77]=4.8519; Edge[32][89]=2.5985; Edge[34][20]=4.1857; Edge[35][29]=8.2803; Edge[36][2]=6.5134; Edge[36][64]=6.5249; Edge[37][18]=6.303; Edge[37][90]=7.6249; Edge[38][44]=2.4565; Edge[40][14]=5.0691; Edge[41][58]=7.5871; Edge[42][22]=3.6432; Edge[43][6]=0.0516; Edge[44][21]=0.7678; Edge[45][72]=6.0247; Edge[46][58]=8.0558; Edge[48][50]=9.5971; Edge[49][80]=2.8529; Edge[51][87]=3.9957; Edge[52][40]=5.7668; Edge[53][2]=7.5553; Edge[53][90]=8.3874; Edge[54][70]=8.8313; Edge[55][86]=5.5893; Edge[57][50]=9.8019; Edge[59][91]=5.9723; Edge[60][74]=5.7238; Edge[62][12]=6.9337; Edge[63][4]=9.5023; Edge[63][62]=8.5126; Edge[64][19]=4.2735; Edge[64][74]=5.5538; Edge[66][56]=0.4477; Edge[68][11]=1.6057; Edge[69][43]=0.6927; Edge[70][31]=6.5151; Edge[70][93]=7.6397; Edge[72][22]=4.3122; Edge[73][5]=8.3626; Edge[73][70]=8.7255; Edge[74][34]=4.7853; Edge[75][18]=6.2253; Edge[75][74]=6.3972; Edge[76][71]=8.965; Edge[77][88]=3.7418; Edge[78][74]=5.9486; Edge[79][29]=8.6863; Edge[80][41]=4.6089; Edge[81][43]=0.3318; Edge[83][41]=5.0734; Edge[84][21]=0.6229; Edge[85][66]=3.7231; Edge[87][27]=4.8109; Edge[88][7]=1.8739; Edge[88][69]=2.0994; Edge[90][2]=6.6922; Edge[91][46]=6.5261; Edge[92][89]=2.875; Edge[93][52]=6.6704; Edge[94][86]=5.6546; Edge[95][52]=6.0395; Edge[96][18]=5.2109; Edge[96][88]=4.2431; Edge[98][59]=4.5634; Edge[99][38]=4.4433; Edge[0][39]=6.5148; Edge[1][24]=3.4035; Edge[2][28]=5.3853; Edge[3][41]=4.5055; Edge[4][13]=8.6891; Edge[4][75]=8.4266; Edge[5][40]=6.3734; Edge[6][49]=1.1626; Edge[7][49]=0.747; Edge[8][42]=4.9025; Edge[9][32]=0.7687; Edge[10][53]=9.5187; Edge[11][9]=0.8995; Edge[12][28]=5.737; Edge[12][96]=6.0524; Edge[13][45]=7.5505; Edge[13][95]=7.1237; Edge[14][69]=2.8924; Edge[15][69]=1.8862; Edge[17][8]=6.9234; Edge[17][72]=6.3951; Edge[18][38]=3.7789; Edge[19][81]=1.5978; Edge[21][32]=1.4536; Edge[22][9]=2.1254; Edge[22][88]=3.263; Edge[24][55]=4.7365; Edge[26][13]=8.9478; Edge[26][70]=8.833; Edge[28][11]=3.02; Edge[28][68]=3.4963; Edge[29][52]=6.6524; Edge[30][34]=6.2017; Edge[31][20]=4.5952; Edge[32][1]=2.3554; Edge[32][94]=3.7537; Edge[34][68]=3.2141; Edge[35][36]=8.1745; Edge[36][22]=5.3739; Edge[36][74]=6.1956; Edge[37][36]=7.446; Edge[37][96]=6.6333; Edge[39][16]=3.9677; Edge[40][20]=4.8163; Edge[41][82]=6.4496; Edge[42][43]=1.9184; Edge[43][32]=1.0377; Edge[45][2]=6.433; Edge[45][78]=6.8393; Edge[46][76]=7.6216; Edge[48][58]=9.3285; Edge[49][87]=3.5493; Edge[51][98]=3.339; Edge[52][64]=5.9048; Edge[53][13]=8.6727; Edge[54][5]=8.4684; Edge[54][93]=8.6058; Edge[55][94]=5.2352; Edge[58][57]=9.5334; Edge[60][16]=4.7351; Edge[60][96]=5.8821; Edge[62][36]=7.2352; Edge[63][13]=8.9082; Edge[63][73]=9.6536; Edge[64][28]=5.3969; Edge[64][85]=5.6431; Edge[66][81]=1.2876; Edge[68][56]=0.467; Edge[69][81]=0.8929; Edge[70][40]=6.7362; Edge[70][96]=6.7032; Edge[72][38]=3.8603; Edge[73][13]=8.8404; Edge[73][95]=7.8691; Edge[74][42]=4.4649; Edge[75][28]=6.2403; Edge[75][90]=7.5472; Edge[77][15]=3.5287; Edge[78][12]=6.6181; Edge[78][96]=6.1069; Edge[79][35]=9.5882; Edge[80][55]=4.2894; Edge[82][47]=7.5349; Edge[83][55]=4.7539; Edge[85][14]=4.9669; Edge[85][72]=5.2231; Edge[87][46]=5.774; Edge[88][11]=2.0372; Edge[89][24]=3.6467; Edge[90][18]=6.2025; Edge[91][58]=7.8357; Edge[93][5]=7.2769; Edge[93][77]=5.9765; Edge[95][14]=5.3417; Edge[95][72]=5.5979; Edge[96][28]=5.2259; Edge[97][6]=1.6096; Edge[98][83]=3.9131; Edge[99][42]=4.9573; Edge[0][37]=8.0334; Edge[1][3]=2.853; Edge[2][22]=4.7206; Edge[3][27]=4.0111; Edge[4][12]=7.9233; Edge[4][70]=8.5742; Edge[5][34]=5.7428; Edge[6][33]=0.8146; Edge[7][43]=0.4672; Edge[8][40]=5.8535; Edge[9][21]=0.0153; Edge[10][45]=8.3965; Edge[11][7]=0.9661; Edge[12][22]=5.0723; Edge[12][95]=6.358; Edge[13][37]=7.9102; Edge[13][85]=6.749; Edge[14][68]=3.3064; Edge[15][68]=2.3003; Edge[17][5]=7.4432; Edge[17][64]=6.8151; Edge[18][22]=4.2309; Edge[19][69]=1.9588; Edge[21][23]=2.5856; Edge[22][7]=2.192; Edge[22][84]=2.7636; Edge[24][46]=5.5247; Edge[26][8]=7.9502; Edge[26][64]=7.8419; Edge[27][94]=5.0603; Edge[28][66]=3.4769; Edge[29][40]=6.4928; Edge[30][31]=6.6112; Edge[31][19]=3.9144; Edge[31][88]=4.055; Edge[32][92]=2.4834; Edge[34][66]=3.1947; Edge[35][30]=8.6198; Edge[36][12]=6.8651; Edge[36][72]=6.105; Edge[37][28]=6.318; Edge[37][95]=6.9389; Edge[38][84]=2.3117; Edge[40][19]=4.1355; Edge[41][67]=6.2134; Edge[42][38]=3.1913; Edge[43][21]=0.2843; Edge[44][84]=2.0909; Edge[45][74]=6.1153; Edge[46][71]=8.0896; Edge[48][57]=9.4965; Edge[49][83]=3.3174; Edge[51][91]=4.7479; Edge[52][42]=4.8159; Edge[53][12]=7.907; Edge[53][99]=7.7299; Edge[54][73]=9.6915; Edge[55][91]=5.738; Edge[58][50]=9.6339; Edge[60][2]=6.0416; Edge[60][95]=6.1878; Edge[62][18]=6.0922; Edge[63][12]=8.1425; Edge[63][70]=8.7933; Edge[64][20]=4.9542; Edge[64][77]=5.211; Edge[66][69]=1.6485; Edge[68][43]=1.1068; Edge[69][56]=0.053; Edge[70][36]=7.516; Edge[70][95]=7.0088; Edge[72][28]=4.9769; Edge[73][8]=7.8427; Edge[73][93]=8.5; Edge[74][39]=4.9563; Edge[75][22]=5.5756; Edge[75][78]=7.1213; Edge[77][14]=4.5348; Edge[78][2]=6.2663; Edge[78][95]=6.4125; Edge[79][30]=9.0257; Edge[80][46]=5.0776; Edge[81][92]=1.114; Edge[83][46]=5.5421; Edge[84][33]=0.1726; Edge[85][68]=3.7425; Edge[87][41]=5.3053; Edge[88][9]=1.8072; Edge[89][3]=3.0961; Edge[90][12]=7.0439; Edge[91][47]=7.1427; Edge[92][94]=4.0302; Edge[93][64]=6.6487; Edge[95][8]=6.1261; Edge[95][64]=6.0178; Edge[96][22]=4.5612; Edge[96][97]=4.3944; Edge[98][67]=5.0531; Edge[99][39]=5.4488; Edge[0][45]=7.6737; Edge[1][27]=3.662; Edge[2][38]=4.2687; Edge[3][46]=4.9741; Edge[4][17]=8.5151; Edge[4][78]=7.9779; Edge[5][52]=6.533; Edge[6][51]=1.609; Edge[7][56]=0.1725; Edge[8][52]=6.0131; Edge[9][43]=0.4006; Edge[10][60]=8.005; Edge[11][21]=0.2146; Edge[12][39]=5.6259; Edge[12][99]=6.3864; Edge[13][52]=7.0107; Edge[13][96]=6.8181; Edge[14][81]=2.5314; Edge[15][81]=1.5252; Edge[17][12]=7.1552; Edge[17][74]=6.4857; Edge[18][39]=4.7844; Edge[20][15]=3.2719; Edge[21][33]=1.1505; Edge[22][11]=2.3553; Edge[22][97]=3.4144; Edge[24][61]=5.1044; Edge[26][17]=8.7738; Edge[26][73]=9.6932; Edge[28][15]=3.7145; Edge[28][88]=3.9277; Edge[29][64]=6.6308; Edge[30][40]=6.8323; Edge[31][28]=5.0378; Edge[32][3]=2.7045; Edge[33][23]=3.0359; Edge[34][69]=2.8; Edge[35][52]=7.5544; Edge[36][28]=6.0386; Edge[36][78]=6.9197; Edge[37][39]=6.2068; Edge[37][99]=6.9674; Edge[39][22]=4.1347; Edge[40][31]=5.3862; Edge[41][91]=6.0575; Edge[42][44]=2.9705; Edge[43][49]=1.0826; Edge[45][12]=6.7848; Edge[45][95]=6.5792; Edge[46][82]=6.9183; Edge[48][65]=9.4964; Edge[49][89]=2.6435; Edge[52][14]=5.2287; Edge[52][72]=5.4849; Edge[53][36]=8.2086; Edge[54][8]=7.9485; Edge[55][41]=5.4894; Edge[56][3]=2.175; Edge[58][71]=9.3992; Edge[60][18]=5.5518; Edge[60][97]=4.7354; Edge[62][39]=5.996; Edge[63][17]=8.7342; Edge[63][75]=8.6457; Edge[64][31]=5.5241; Edge[64][88]=4.414; Edge[67][25]=7.7369; Edge[68][66]=2.0626; Edge[70][5]=7.5024; Edge[70][52]=6.8958; Edge[71][50]=9.6677; Edge[72][39]=4.8658; Edge[73][17]=8.6663; Edge[74][14]=4.8777; Edge[74][66]=3.6338; Edge[75][36]=7.3683; Edge[75][95]=6.8612; Edge[77][19]=3.6013; Edge[78][16]=4.9599; Edge[78][97]=4.9601; Edge[79][36]=8.5804; Edge[80][59]=4.5237; Edge[82][48]=8.191; Edge[83][59]=4.9882; Edge[85][15]=3.9608; Edge[85][74]=5.3137; Edge[87][47]=6.3906; Edge[88][15]=2.7317; Edge[89][27]=3.9051; Edge[90][39]=6.1063; Edge[91][67]=6.462; Edge[93][8]=6.757; Edge[93][85]=6.4086; Edge[95][15]=4.3355; Edge[95][74]=5.6885; Edge[96][31]=5.3531; Edge[97][9]=1.9586; Edge[98][87]=4.145; Edge[99][64]=6.0462; Edge[0][60]=7.2822; Edge[1][61]=4.2048; Edge[2][39]=5.2741; Edge[3][55]=4.186; Edge[4][35]=9.2327; Edge[4][95]=7.7178; Edge[5][64]=6.5113; Edge[6][56]=0.5881; Edge[7][81]=0.6674; Edge[8][64]=5.9915; Edge[9][49]=0.8137; Edge[10][62]=8.5454; Edge[11][32]=0.5388; Edge[12][42]=5.1344; Edge[13][5]=7.6173; Edge[13][60]=7.159; Edge[13][99]=7.1522; Edge[14][88]=3.7379; Edge[16][6]=1.6094; Edge[17][14]=6.1389; Edge[17][75]=7.6585; Edge[18][44]=3.5582; Edge[20][19]=3.3445; Edge[21][49]=1.4985; Edge[22][15]=3.0499; Edge[23][41]=5.1399; Edge[24][82]=5.6968; Edge[26][29]=8.5896; Edge[26][93]=8.6075; Edge[28][16]=4.0789; Edge[28][97]=4.0791; Edge[29][77]=5.9586; Edge[30][52]=6.9919; Edge[31][34]=4.7556; Edge[32][24]=3.2551; Edge[33][51]=2.3952; Edge[34][81]=2.439; Edge[35][64]=7.5327; Edge[36][31]=6.1659; Edge[36][85]=6.2848; Edge[37][45]=7.3657; Edge[38][6]=1.3245; Edge[39][38]=3.6827; Edge[40][34]=4.9767; Edge[42][7]=2.254; Edge[42][66]=2.8743; Edge[43][56]=0.5081; Edge[45][16]=5.1266; Edge[45][96]=6.2736; Edge[47][48]=8.6355; Edge[48][71]=9.3624; Edge[51][23]=3.8303; Edge[52][15]=4.2225; Edge[52][74]=5.5755; Edge[53][37]=8.4879; Edge[54][13]=8.9461; Edge[55][46]=5.958; Edge[56][24]=2.7255; Edge[59][25]=7.2473; Edge[60][22]=4.9021; Edge[60][99]=6.2162; Edge[62][45]=7.1549; Edge[63][35]=9.4518; Edge[63][78]=8.197; Edge[64][34]=5.1147; Edge[64][96]=5.7122; Edge[67][46]=6.682; Edge[68][69]=1.6679; Edge[70][8]=6.9825; Edge[70][64]=6.8742; Edge[71][57]=9.5672; Edge[72][42]=4.3743; Edge[73][29]=8.4821; Edge[74][15]=3.8715; Edge[74][68]=3.6532; Edge[75][39]=6.1291; Edge[75][96]=6.5556; Edge[77][20]=4.282; Edge[78][18]=5.7766; Edge[78][99]=6.441; Edge[79][54]=9.8957; Edge[80][67]=5.0134; Edge[82][50]=8.4964; Edge[83][67]=5.4779; Edge[85][19]=4.0334; Edge[85][77]=4.9709; Edge[87][55]=4.9858; Edge[88][19]=2.8043; Edge[89][41]=4.3995; Edge[90][45]=7.2652; Edge[91][82]=6.6982; Edge[93][14]=5.9726; Edge[94][41]=5.5547; Edge[95][20]=5.0889; Edge[95][77]=5.3456; Edge[96][38]=4.1092; Edge[97][16]=3.2474; Edge[98][91]=4.8972; Edge[99][72]=5.6263; Edge[0][62]=7.8225; Edge[1][86]=4.2563; Edge[2][44]=4.0479; Edge[3][80]=3.3055; Edge[4][36]=8.2249; Edge[4][96]=7.4122; Edge[5][74]=6.182; Edge[6][80]=1.7187; Edge[7][89]=1.0937; Edge[8][72]=5.5715; Edge[9][56]=0.2392; Edge[10][63]=9.7542; Edge[11][43]=0.6305; Edge[12][60]=6.3933; Edge[13][8]=7.0974; Edge[13][64]=6.9891; Edge[14][15]=3.5247; Edge[15][7]=1.6607; Edge[16][9]=1.9584; Edge[17][28]=6.3288; Edge[17][77]=6.1429; Edge[18][84]=3.4133; Edge[20][42]=3.8653; Edge[21][51]=1.9449; Edge[22][16]=3.4142; Edge[23][59]=5.0548; Edge[24][86]=5.156; Edge[26][30]=8.929; Edge[27][46]=5.7831; Edge[28][18]=4.8956; Edge[29][5]=7.259; Edge[29][85]=6.3907; Edge[30][70]=7.9612; Edge[31][42]=4.4352; Edge[32][27]=3.5135; Edge[33][80]=2.5049; Edge[35][5]=8.1609; Edge[35][70]=8.5237; Edge[36][39]=5.9275; Edge[36][95]=6.6596; Edge[37][60]=6.9742; Edge[38][7]=1.74; Edge[39][42]=4.1968; Edge[40][74]=5.4159; Edge[42][9]=2.1874; Edge[42][68]=2.8936; Edge[43][89]=1.4293; Edge[45][18]=5.9433; Edge[45][99]=6.6077; Edge[47][50]=8.9409; Edge[49][3]=2.7495; Edge[51][41]=4.4993; Edge[52][19]=4.2951; Edge[52][77]=5.2326; Edge[53][45]=8.1283; Edge[54][17]=8.7721; Edge[55][47]=6.5746; Edge[56][32]=1.6774; Edge[59][41]=5.7237; Edge[60][28]=5.5668; Edge[61][65]=7.8034; Edge[62][60]=6.7634; Edge[63][36]=8.4441; Edge[63][90]=8.6229; Edge[64][40]=5.7452; Edge[65][50]=9.8018; Edge[67][47]=7.2986; Edge[68][81]=1.3069; Edge[70][12]=7.2144; Edge[70][72]=6.4543; Edge[71][65]=9.5671; Edge[72][66]=3.5433; Edge[73][30]=8.8215; Edge[74][19]=3.9441; Edge[74][72]=5.1339; Edge[75][45]=7.288; Edge[75][99]=6.8897; Edge[77][34]=4.4425; Edge[78][22]=5.1269; Edge[79][4]=9.6386; Edge[79][63]=9.8578; Edge[80][83]=3.8735; Edge[82][57]=8.3959; Edge[83][87]=4.5698; Edge[85][20]=4.7141; Edge[85][88]=4.1739; Edge[87][59]=5.2201; Edge[88][38]=2.8111; Edge[89][46]=4.8682; Edge[90][60]=6.8737; Edge[92][3]=2.981; Edge[93][20]=5.7198; Edge[94][46]=6.0233; Edge[95][22]=4.8668; Edge[95][85]=5.7777; Edge[96][39]=5.1147; Edge[97][38]=2.9625; Edge[99][2]=6.0347; Edge[99][74]=5.7169; Edge[0][2]=7.1007; Edge[0][75]=7.9556; Edge[1][89]=2.747; Edge[2][72]=5.4517; Edge[3][82]=5.1462; Edge[4][37]=8.5043; Edge[4][99]=7.7463; Edge[5][77]=5.8392; Edge[6][98]=1.7583; Edge[8][14]=5.3153; Edge[8][74]=5.6621; Edge[10][0]=9.0641; Edge[10][75]=8.6785; Edge[11][49]=0.5837; Edge[12][64]=6.2233; Edge[13][12]=7.3292; Edge[13][70]=7.9801; Edge[14][19]=3.5973; Edge[15][9]=1.594; Edge[16][21]=1.2735; Edge[17][29]=7.5627; Edge[17][85]=6.575; Edge[18][97]=4.0641; Edge[20][66]=3.0343; Edge[21][56]=0.924; Edge[22][38]=3.1292; Edge[23][67]=5.5444; Edge[24][87]=4.5525; Edge[26][35]=9.4915; Edge[27][55]=4.995; Edge[28][22]=4.2459; Edge[29][8]=6.7391; Edge[30][5]=7.5984; Edge[30][77]=6.298; Edge[31][66]=3.6041; Edge[32][49]=2.2519; Edge[33][83]=2.9694; Edge[35][8]=7.641; Edge[35][75]=8.3761; Edge[36][42]=5.436; Edge[36][96]=6.354; Edge[37][62]=7.5146; Edge[38][9]=1.6734; Edge[39][44]=3.462; Edge[40][77]=5.073; Edge[42][11]=2.4173; Edge[42][69]=2.4796; Edge[44][6]=1.1037; Edge[45][22]=5.2936; Edge[46][47]=7.3628; Edge[47][57]=8.8404; Edge[49][24]=3.3; Edge[51][59]=4.4141; Edge[52][20]=4.9759; Edge[52][85]=5.6647; Edge[53][60]=7.7368; Edge[54][29]=8.5879; Edge[55][59]=5.4042; Edge[56][49]=1.7224; Edge[59][46]=6.1924; Edge[60][38]=4.4502; Edge[61][76]=7.2013; Edge[62][78]=6.9882; Edge[63][37]=8.7234; Edge[63][95]=7.9369; Edge[64][42]=4.7942; Edge[66][7]=1.423; Edge[67][58]=7.9916; Edge[69][1]=0.625; Edge[70][14]=6.1981; Edge[70][74]=6.5449; Edge[72][11]=3.0864; Edge[72][68]=3.5626; Edge[73][35]=9.384; Edge[74][20]=4.6249; Edge[74][77]=4.8816; Edge[75][60]=6.8965; Edge[76][48]=8.8943; Edge[77][42]=4.122; Edge[78][28]=5.7916; Edge[79][5]=8.5668; Edge[79][70]=8.9297; Edge[80][87]=4.1053; Edge[82][58]=8.2278; Edge[83][91]=5.322; Edge[85][28]=5.1568; Edge[86][48]=7.6502; Edge[87][67]=5.7098; Edge[88][43]=1.5383; Edge[89][55]=4.08; Edge[90][62]=7.4141; Edge[92][24]=3.5315; Edge[93][29]=7.3963; Edge[94][47]=6.6399; Edge[95][28]=5.5315; Edge[95][88]=4.5487; Edge[96][42]=4.6233; Edge[97][44]=2.7417; Edge[99][16]=4.7283; Edge[99][95]=6.1809; int i,j; //int cut[V]={0}; double temp=100000.0; double cEdge[V][V]= {0.0}; double* cedge=&cEdge[0][0]; for(i=0; i<V; i++) for(j=0; j<V; j++) cEdge[i][j]=Edge[i][j]; int* rsPath = Augmentation(); // printf("\n\n"); // for(i=0;i<V;i++) // printf("%d\t",*(rsPath+i)); for(i=0; i<V-1; i++) { if(*(rsPath+i+1)!=-1 && temp>Edge[*(rsPath+i)][*(rsPath+i+1)]) temp=Edge[*(rsPath+i)][*(rsPath+i+1)]; else if(*(rsPath+1)==-1) { printf("No Initial Solution Found! Program Stops!\n"); exit(1); } //printf("%d\n",temp); } maxFlow+=temp; while(*(rsPath+1)!=-1) { for(i=0; i<V-1; i++) { if(*(rsPath+i+1)!=-1) { Edge[*(rsPath+i)][*(rsPath+i+1)]=Edge[*(rsPath+i)][*(rsPath+i+1)]-temp; Edge[*(rsPath+i+1)][*(rsPath+i)]=Edge[*(rsPath+i+1)][*(rsPath+i)]+temp; //printf("Edge[%d][%d]=%d\n",i,j,Edge[i][j]); } } for(i=0; i<V; i++) // //printf("\n"); printf("%d\t",*(rsPath+i)); // //printf("\n"); // } printf("\nadded flow value: %lf\n",temp); rsPath=NULL; rsPath=Augmentation(); temp=100000.0; for(i=0; i<V-1; i++) if(*(rsPath+i+1)!=-1&&temp>Edge[*(rsPath+i)][*(rsPath+i+1)]) { temp=Edge[*(rsPath+i)][*(rsPath+i+1)]; //printf("%d temp=%d\n",i,temp); } if(*(rsPath+1)!=-1) maxFlow+=temp; printf("The max flow value is %lf\n",maxFlow); // else // for(i=0;i<V;i++) // for(j=;j<V;j++) // if() } // int rCut=0; printf("The max flow value is %lf\n",maxFlow); // for(i=1;i<V;i++) // if(Edge[Resource][i]==0&&cEdge[Resource][i]>0) // rCut++; // int * initialCut=malloc(rCut*sizeof(int)); // int x=0; // for(i=1;i<V;i++) // if(Edge[Resource][i]==0&&cEdge[Resource][i]>0){ // *(initialCut+x)=i; // x++; // } // int* edge=&Edge[0][0]; // int* cedge=&cEdge[0][0]; // for(i=0;i<x;i++) // cutSet(i,initialCut,edge,cedge,x); // for(i=0;i<V;i++) // for(j=0;j<V;j++) // printf("Edge[%d][%d]=%d\t",i,j,Edge[i][j]); //int* finalCut; double* edge=&Edge[0][0]; cutSetSize=1; int* initialCut=malloc(1*sizeof(int)); *(initialCut+0)=Resource; // //int finalCut=0; cutSet(Resource,initialCut,edge,cedge); printf("cutsize %d\n",cutSetSize); printf("The R set includes:\n"); for(i=0; i<cutSetSize; i++) printf("%d ",*(initialCut+i)); printf("\n"); int* rBar = malloc((V-cutSetSize)*sizeof(int)); //printf("%d ",*(rBar+1)); int rBarIndex=0; double minCutValur=0.0; for(i=0; i<V; i++) for(j=0; j<cutSetSize; j++) if(*(initialCut+j)!=i) { if(j==cutSetSize-1) { *(rBar+rBarIndex)=i; rBarIndex++; printf("%d ",*(rBar+rBarIndex-1)); } } else break; for(i=0; i<V-cutSetSize; i++) for(j=0; j<cutSetSize; j++) if(Edge[*(initialCut+j)][*(rBar+i)]==0&&Edge[*(rBar+i)][*(initialCut+j)]==Edge[*(rBar+i)][*(initialCut+j)]&&cEdge[*(initialCut+j)][*(rBar+i)]>0) { minCutValur+=Edge[*(rBar+i)][*(initialCut+j)]; printf("\nThe minimum cut value is %lf\n",minCutValur); } free(initialCut); free(rBar); }