es_biyectiva.cpp
// $Id$
/* COMIENZO DE DESCRIPCION
__USE_WIKI__
Escribir una funci\'on #bool es_biyectiva (map <int,int> &A)#
que retorna true si la misma representa una funci\'on biyectiva,
esto es, si la correspondencia #A# describe una relaci\'on
{\it uno a uno}. Por ejemplo, supongamos el conjunto
#X = (0,1,2,3,4,5)# y consideremos las correspondencias
#A1 = { (0,2), (1,5), (2,0), (3,3), (4,4), (5,1) }# y
#A2 = { (0,2), (1,1), (2,0), (3,3), (4,3), (5,1) }#.
En el primer caso, cada elemento (de 0 a 5) tiene preimagen,
por lo que #es_biyectiva (A1)# debe retornar #true#.
En cambio, en el segundo caso, los elementos 4 y 5 no tienen
preimagen, por lo que #es_biyectiva (A2)# debe retornar
#false#.
keywords: correspondencia
FIN DE DESCRIPCION */
// -----------------------------------------------------------------
#include <iostream>
#include <map>
#include "./util.h"
using namespace std ;
//--------------------------------------------------------------------
void imprime (map <int,int> & M) {
map <int,int> :: iterator p;
int x_dominio ;
int y_rango;
cout << "mapeo actual (x_dominio, y_rango):" << endl ;
p = M.begin ();
while (p != M.end () ) {
x_dominio = p->first;
y_rango = p->second;
cout << "x_dominio = " << x_dominio << " " ;
cout << "M [x_dominio] = " << M [x_dominio] << endl ;
p++;
} // end while
}
//--------------------------------------------------------------------
bool es_biyectiva (map <int,int> & A) {
map <int,int> B ;
map <int,int> :: iterator p, q;
int x_dominio ;
int y_rango;
p = A.begin ();
while ( p != A.end () ) {
x_dominio = p->first;
y_rango = p->second;
q = B.find (y_rango);
if ( q == B.end () ) B [y_rango] = x_dominio ;
p++;
} // end while
return B.size() == A.size() ;
}
//--------------------------------------------------------------------
int main() {
map <int,int> A1, A2 ;
bool b1, b2;
// mapeo 1
cout << endl;
cout << "mapeo 1:" << endl;
A1.clear ();
A1 [0] = 2;
A1 [1] = 5;
A1 [2] = 0;
A1 [3] = 3;
A1 [4] = 4;
A1 [5] = 1;
imprime (A1);
b1 = es_biyectiva (A1);
cout << endl;
cout << "es_inyectiva (A1) = " << b1 << endl;
// mapeo 2
cout << endl;
cout << "mapeo 2:" << endl;
A2.clear ();
A2 [0] = 3;
A2 [1] = 1;
A2 [2] = 0;
A2 [3] = 2;
A2 [4] = 3;
A2 [5] = 1;
imprime (A2);
b2 = es_biyectiva (A2);
cout << endl;
cout << "es_inyectiva (A2) = " << b2 << endl;
cout << endl;
return 0;
}
// -----------------------------------------------------------------
//
Generated by GNU Enscript 1.6.6.