Les muestro mi codigo
Código C++:
Ver original
int matriz[n][n]; int minimo; list <int> vertice;//Subconjunto solución /*--------------------------------------------------*/ // Rellenamos matriz a ceros for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ matriz[i][j] = 0; } } matriz[0][1]=5; matriz[0][2]=2; matriz[0][3]=3; matriz[1][0]=5; matriz[1][2]=4; matriz[1][3]=5; matriz[2][0]=2; matriz[2][1]=4; matriz[2][3]=1; matriz[3][0]=3; matriz[3][1]=5; matriz[3][2]=1; bool aumento; int contador; int contador2; int val1,val2; for(int i=0; i<n; i=val2){ aumento = true; contador2 = 0; for(int j=0; j<n; j++){ if (aumento){ contador = 0; while (matriz[i][contador]==0){ contador++; } minimo = matriz[i][contador]; //cout << "\nMINIMO INICIAL EN FILA " << i << " : " << minimo << endl; aumento = false; } contador2++; if(matriz[i][j]!=0){ if(matriz[i][j] < minimo){ minimo = matriz[i][j]; val1 = i; val2 = j; //cout << "MINIMO DE LA FILA " << i << ": " << minimo << endl; cout << "POSICION " << "("<<val1<<","<<val2<<")"<<endl; } } //cout << "CONTADOR2 : " << contador2 << endl; if (contador2 == n){ vertice.push_back(val1); vertice.push_back(val2); for(int j=0; j<n; j++){ matriz[j][val1]=0; matriz[j][val2]=0; } // cout << "POSICION " << "("<<val1<<","<<val2<<")"<<endl; } } }
Lo esencial del problema. Segun la matriz que he introducido, deberia calcular el minimo de la primera fila, excluyendo siempre el cero, seleccionar el 0,2 que es el minimo y borrar las columnas de ambos numeros. Luego iria a la fila 2, buscaria el minimo que esta en el 2,3 y borraria de nuevo columnas. El problema es que a partir de ahi no avanza y entra en bucle cuando deberia seguir con 3,1 y acabar ...