pequeña duda sobre matriz simétrica c++

Iniciado por indict, 18 Abril 2013, 18:05 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

Hola,

he echo un programa donde dada una matriz devuelva "si" si es simétrica y "no" si no lo es. Pero solo me imprime por pantalla "no" cuando no lo es, y cuando si lo es no me imprime nada. ¿Qué debo rectificar para que me imprima por pantalla "si" cuando si lo es?

#include<iostream>
#include <cstdlib>
#include<vector>
#include<algorithm>
#include <iomanip>
using namespace std;


bool Esdiagonal(vector<vector<int> >M){
  int i=0,j;
  bool p=true;
   while(i<M.size()-1 and p){
       j=i+1;
       while(j<M.size() and p){
                              if(M[i][j]!=M[j][i]){
                                                             p=false;
                                                             }
                             
              }
       
       }
       return p;

}


int main(){
    int m,n;
    cout<<"introduzca el numero de filas"<<endl;
    cin>>m;
    cout<<"introduzca el numero de columnas"<<endl;
    cin>>n;
    vector<vector<int> > matriz ( m, vector<int> ( n ) );
   
    int k = 0;
  for ( int i = 0; i < m; i++ ) {
    for ( int j = 0; j < n; j++ ){
      cout << "["<<i+1<<"]"<< "["<<j+1<<"]= ";/*activa esta y la siguiente para entrar a mano*/
      cin >>matriz[i][j];
      //matriz[i][j] = k++;/*y desactivas esta*/
    }
  }
 


  cout<<'\n';
  for ( int i = 0; i < n; i++ ) {
    for ( int j = 0; j < m; j++ )
      cout<< setw ( 3 ) << matriz[i][j] <<' ';
    cout<<'\n';
  }
  if(Esdiagonal(matriz)){cout<<"si"<<endl;}
  else{cout<<"no"<<endl;}
   // muestra(matriz,n,m);
   // transpon(matriz,n,m);

    system("pause");
    return 0;
  }



¡Gracias por la ayuda!

satu

Buenas!!

Te falta incrementar i y j en la función!!!

Y además el bucle interno lo tienes que recorrer según el número de elementos de M[i ] no de M

Código (cpp) [Seleccionar]

bool Esdiagonal(vector<vector<int> > M) {
   unsigned i = 0, j;
   bool p = true;
   while(i < M.size() - 1 and p) {
       j = i + 1;
       while(j < M[i].size() and p) {
           if(M[i][j] != M[j][i]) {
               p = false;
           }
           j++;
       }
       i++;
   }
   return p;
}


Saludos
Breakbeat como forma de vida

indict

¡muchas gracias por corregir el error! ;)