#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/******************************************************************************************
Por: Pablo Navarrete C.
Rol: 2373543-1
Problema: Relaxed Time Traveling Tournament
Metodo: Simulated Annealing
*******************************************************************************************/
int n = 4;
int n2 = n + 1; // numero de equipos
int fec = 2 * (n - 1); // numero de fechas o partidos
int i;
int j;
int a;
int sum;
int igual;
int temp;
//FUNCION QUE CREA LA SOLUCION INICIAL EN MODO RANDOM ------------------------------------
int** crear_solucion(){
int x[n2][n2]; // establece instancia de partidos. valores enter 1 y n
// primer valor local, segundo visita
int c[n2][n2]; // costos de variable X[i][j]
int y[n2][fec + 1]; // formato respuesta
int z[n2][fec + 1]; // formato respuesta 2
//Iniciar matriz en 0
for( i = 1 ; i <= n ; i++ ){
for( j = 1 ; j <= n ; j++ ){
x[i][j] = 0;
}
}
i = 1;
j = 1;
srand ( time(NULL) );
system("clear");
//Genera Matriz Solucion Inicial esigando fechas en random
for( i = 1 ; i < n2 ; i++ ){
for( j = i+1 ; j < n2 ; j++ ){
do{
sum = rand() % 2;
if(sum == 0){ sum = 1;}else{sum = -1;}
x[i][j] = sum*((rand() % (n-1)) + 1);
x[j][i] = -1*(x[i][j]);
igual = 0;
for( a=1 ; a <= n ; a++ ){
if( (abs(x[i][j]) == abs(x[i][a])) && a != j ){
igual = 1;
}
if( (abs(x[i][j]) == abs(x[a][j])) && a != i ){
igual = 1;
}
}
}while(igual != 0);
}
}
//SOLUCION INICIAL FILA vs COLUMNA EN X[i][j] la FECHA
for(i=1;i<n2;i++){
for(j=1;j<n2;j++){
if(i!=j){
// printf ("\t%d\t|", x[i][j] );
temp = x[i][j];
y[i][temp] = j;
y[i][(-1)*temp] = (-1)*j;
y[j][temp] = i;
y[j][(-1)*temp] = (-1)*i;
}
}
}
//SOLUCION INICIAL POR EQUIPO ESTILO SOLUCION SOLICITADA de -1 -2 ... -n 1 2 ... n
//Y TRASPASO A SOLUCION INICIAL POR EQUIPO ESTILO SOLUCION SOLICITADA de 0 2 3 ... 2(n-1)
a=0;
/*
printf ("\n\n");
printf ("\t\t----TABLA DE PARTIDOS SOLUCION INICIAL----");
printf ("\n\n");
*/
for( i=-1 ; i >= (-1)*(n-1) ; i-- ){
for(j=1;j<n2;j++){
z[j][a] = y[j][i];
}
a++;
}
for( i=1 ; i <= (n-1) ; i++ ){
for(j=1;j<n2;j++){
z[j][a] = y[j][i];
}
a++;
}
/*
// IMPRIME TABLA DE RESULTADOS INICIAL
for( a=0 ; a < 2*(n-1) ; a++ ){
for(j=1;j<n2;j++){
printf ("\t%d\t|", z[j][a] );
}
}
*/
return z;
}
//FUNCION QUE CALCULA EL COSTO DE LA SOLUCION ACTUAL ------------------------------------
/*
int function calc_costo(){
}
*/
int main(){
system("clear");
int x[n2][fec + 1];
x = crear_solucion();
printf ("Contenido: %d \n", x[0][0]);
/*
printf ("\n\n");
printf ("\t\t----TABLA DE PARTIDOS SOLUCION INICIAL----");
printf ("\n\n");
// IMPRIME TABLA DE RESULTADOS INICIAL
for( a=0 ; a < 2*(n-1) ; a++ ){
for(j=1;j<n2;j++){
printf ("\t%d\t|", x[j][a] );
}
printf ("\n\n");
}
*/
return 0;
}