#include #include #include #define M 20 using namespace std; bool esBipartito(int n, int [][M]); void mostrarMatriz(int mAdyacencia[][M], int nVertices); int main(){ int nVertices; /* Numero de vertices */ int mAdyacencia[M][M]; /* Matriz de Adyacencia */ bool res; string s; cout << "Taller 2 - Grafo Bipartido" << endl; cout << "Nota: Las matrices se llenan por filas!" << endl << endl; while (1){ cout << "Vertices: "; cin >> s; /* Convertir string a entero */ istringstream convert(s); if (convert >> nVertices){ break; } } cout << endl << "Llenar matriz de adyacencia con 1's o 0's" << endl << endl;; for(int i = 0; i < nVertices; i++){ for (int j = 0; j < nVertices; j++){ cout <<"[" << i + 1 << "," << j+1 << "]: "; cin >> mAdyacencia[i][j]; } } mostrarMatriz(mAdyacencia, nVertices); res = esBipartito(nVertices, mAdyacencia); if(res == true) cout << endl << "Grafo bipartito!" << endl; else{ cout << endl << "Grafo NO bipartito!" << endl; } cin.sync(); cin.get(); return 0; } bool esBipartito(int nVertices, int mAdyacencia[][M]){ int clase[M]; clase[0] = 0; if(mAdyacencia[0][1] == 0) clase[1] = 0; else{ clase[1] = 1; } for(int i = 2; i < nVertices; i++){ if(mAdyacencia[0][i] == 0) clase[i] = 0; else{ clase[i] = 1; } for(int j = 1; j <= i-1; j++){ if(clase[i] == clase[j] && mAdyacencia[i][j] == 1) return false; } } return true; } void mostrarMatriz(int mAdyacencia[][M], int nVertices){ for (int i = 0; i < nVertices; i++){ cout << endl; for (int j = 0; j < nVertices; j++) cout << " " << mAdyacencia[i][j]; } cout << endl; }