me has dejado mas perdido desde que arranque, me dices una cosa y luego otra , no logro entender que es lo que me quieres decir , solo necesito saber que correcciones hago puntualmente, porque tus explicaciones no me quedan muy claras
Pero si te digo cambia esto por esto y no entiendes por qué lo haces, es lo mismo que no avanzar. El objetivo es que entiendas el problema y seas capaz de encontrar la solución por ti mismo. Te expliqué lo que era un grafo conexo y un grafo completo, te comenté las características de la matriz de adyacencia de un grafo conexo y de un grafo completo y te puse un pseudocódigo de cómo identificar un grafo conexo.
No me has entendido, no pasa nada. Prefiero hacer otro intento para explicártelo en vez de darte la solución. Me he dado cuenta de que yo te he puesto dos códigos en los que trato a la función <esConexo()> como una función de la clase principal y no de la clase <Matriz_de_adyacencia>, fallo mío. Igual eso te ha confundido más. Empiezo otra vez:
Aquí tienes un ejemplo de una matriz de adyacencia de un grafo conexo (ya que ninguna fila ni ninguna columna está compuesta únicamente de 0) y no dirigido (ya que la matriz es simétrica respecto a la diagonal principal):
Código:
0 1 1 0 1
1 0 1 0 1
1 1 0 1 0
0 0 1 0 1
1 1 0 1 0
Código:
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0
Ahora vamos a ver cómo funciona tu función:
Citar
Código
public boolean esConexoo(){ boolean conexoo = true; // supones que el grafo es conexo for(int i = 0; i < matriz.length; i++){ // para cada fila i... for(int j = 0; j < matriz.length; j++){ // ...recorremos cada columna j y... if(i != j && matriz[i][j] == 0){ // ...si no estamos en la diagonal principal y esa casilla tiene un 0... conexoo = false; // ...el grafo deja de ser conexo break; // y dejamos de comprobar columnas para esa fila y pasamos a la siguiente fila } } } return false; // y retornamos siempre false }
Citar
Código
Matriz_de_adyacencia matriz = new Matriz_de_adyacencia[5][5]; // dar valores a la matriz de adyacencia if(matriz.esConexo()) else }
Y el último problema de tu función que he citado un poco más arriba es la última línea: <return false>. La "gracia" de la función es devolver <true> cuando el grafo es conexo y devolver <false> cuando no lo es. Si devuelves siempre <false> pues no tendrá mucho sentido. Entonces para devolver <true> o <false> dependiendo de lo que valga la variable <conexoo> lo que tienes que hacer es devolver la propia variable: <return conexoo>. Así cuando <conexoo> valga <true>, estarás retornando <true> y cuando <conexoo> valga <false>, estarás retornando <false>.
Para intentar dejarlo lo más claro posible te explico ahora el pseudocódigo que te puse anteriormente en otro mensaje:
PD: Lo he modificado un poco para hacerlo más fácil de entender aunque un poco menos eficiente. El original seguirá estando en el otro mensaje que puse anteriormente.
Citar
Código:
matriz[N][N]
i := 0
conexo = true // suponemos que el grafo es conexo
mientras conexo and i < N // mientras siga siendo conexo y no se acaben las filas, para cada fila...
conexo = false // ...suponemos que no es conexo y empezamos a comprobar cada columna de esa fila...
j := 0
mientras !conexo and j < N // ...mientras siga sin ser conexo y no se acaben las columnas...
conexo = (matriz[i][j] != 0) // ...si la casilla vale 0, sigue sin ser conexo (false) pero si es distinto de 0, vale true para pasar a la siguiente fila directamente
j := j + 1
fin mientras
i := i + 1
fin mientras
return conexo // ...cuando acabas de recorrer toda la matriz devuelves el valor de <conexo> ya sea true o false
Espero que con esta explicación te haya quedado un poco más claro. Si tienes alguna duda sobre una parte específica de todo lo explicado puedes citar esa parte y exponer tu duda para poder centrarme en aclararte esa parte.