Exemplo n.º 1
0
int main(void) {
	int **flow, **capacities, i;
	flow = (int **) calloc(NODES, sizeof(int*));
	capacities = (int **) calloc(NODES, sizeof(int*));
	for (i = 0; i < NODES; i++) {
		flow[i] = (int *) calloc(NODES, sizeof(int));
		capacities[i] = (int *) calloc(NODES, sizeof(int));
	}

	//Sample graph
	capacities[0][1] = 2;
	capacities[0][2] = 9;
	capacities[1][2] = 1;
	capacities[1][3] = 0;
	capacities[1][4] = 0;
	capacities[2][4] = 7;
	capacities[3][5] = 7;
	capacities[4][5] = 4;

	printf("Capacity:\n");
	printMatrix(capacities);

	printf("Max Flow:\n%d\n", pushRelabel(capacities, flow, 0, 5));

	printf("Flows:\n");
	printMatrix(flow);

	return 0;
}
int main(int argc, char *argv[]) {
	int **flow, **capacities, i;
	flow = (int **) calloc(NODES, sizeof(int*));
	capacities = (int **) calloc(NODES, sizeof(int*));
	for (i = 0; i < NODES; ++i) {
		flow[i] = (int *) calloc(NODES, sizeof(int));
		capacities[i] = (int *) calloc(NODES, sizeof(int));
	}

	//Sample graph
	/*
	capacities[0][1] = 2;
	capacities[0][2] = 9;
	capacities[1][2] = 1;
	capacities[1][3] = 0;
	capacities[1][4] = 0;
	capacities[2][4] = 7;
	capacities[3][5] = 7;
	capacities[4][5] = 4;
	*/

	/*
	for (i = 1; i <= 10; ++i) {
		capacities[0][i + 10] = 1;
		capacities[i][21] = 1;
	}
	capacities[11][1] = 1;
	capacities[11][3] = 1;
	capacities[11][4] = 1;
	capacities[12][1] = 1;
	capacities[12][2] = 1;
	capacities[12][8] = 1;
	capacities[13][1] = 1;
	capacities[13][3] = 1;
	capacities[14][3] = 1;
	capacities[14][4] = 1;
	capacities[15][3] = 1;
	capacities[15][4] = 1;
	capacities[16][2] = 1;
	capacities[16][5] = 1;
	capacities[16][7] = 1;
	capacities[17][5] = 1;
	capacities[17][6] = 1;
	capacities[17][10] = 1;
	capacities[18][5] = 1;
	capacities[18][6] = 1;
	capacities[18][7] = 1;
	capacities[18][8] = 1;
	capacities[18][10] = 1;
	capacities[19][9] = 1;
	capacities[20][4] = 1;
	capacities[20][9] = 1;
	*/

	capacities[0][1] = 12;
	capacities[0][2] = 1;
	capacities[0][3] = 2;
	capacities[1][2] = 1;
	capacities[1][4] = 7;
	capacities[1][5] = 5;
	capacities[2][5] = 1;
	capacities[2][6] = 7;
	capacities[3][2] = 3;
	capacities[3][5] = 2;
	capacities[3][6] = 5;
	capacities[4][2] = 2;
	capacities[4][5] = 3;
	capacities[4][7] = 3;
	capacities[5][6] = 2;
	capacities[5][7] = 3;
	capacities[5][8] = 1;
	capacities[6][8] = 9;
	capacities[7][8] = 1;
	capacities[7][9] = 4;
	capacities[8][9] = 11;

	
	printf("Capacity:\n");
	printMatrix((const int**)capacities);

	printf("Max Flow:\n%d\n", pushRelabel((const int**)capacities, flow, 0, NODES - 1));

	printf("Flows:\n");
	printMatrix((const int**)flow);

	for (i = 0; i < NODES; ++i) {
		free(flow[i]);
		free(capacities[i]);
	}
	free(flow);
	free(capacities);
	return 0;
}