Grafo bipartito

Un Grafo bipartito se denomina en Teoría de grafos a un grafo cuyos vértices se pueden separar en dos conjuntos disjuntos V1 y V2 y las aristas siempre unen vértices de un conjunto con vértices de otro:
  

no existe ninguna arista e = (x1,x2) ni e = (y1,y2)

Grafo bipartito completo K2,3 Siendo V el conjunto que contiene todos los vértices del grafo. El conjunto de todos los grafos bipartitos es denominado ; en particular, un grafo bipartito uniendo dos conjuntos, de m y n elementos, respectivamente, se denota por , o, simplemente, Km,n. Un grafo bipartito en el cual todos los elementos de V1 están unidos con todos los elementos de V2 se denomina bipartito completo Los grafos bipartitos suelen representarse gráficamente con dos columnas (o filas) de vértices y las aristas uniendo vértices de columnas (o filas) diferentes.

. B y C (Subdivisión 1) están conectados con los vértices D y E (Subdivisión 2). a los vértices D y E. El grafo es bipartito. B-D y C-E. Un ejemplo puede ser el siguiente: En este caso tenemos las aristas A-E. la primera parte contendría a los vértices A. B y C y la otra. ya que no existen aristas entre E y D ni tampoco entre A. la diferencia es que cada vértice perteneciente a una subdivisión (parte) del grafo completo está conectada a todos los vértices de la otra subdivisión del grafo. Se podría dividir el grafo en dos partes. Grafo bipartito completo Es igual que el grafo bipartito.Grafos bipartitos Es aquel grafo que puede ser “dividido en dos partes” de tal forma que una de las partes del mismo tiene aristas en las que exclusivamente se conecta a los vértices de la otra parte. Por ejemplo: En este caso los vértices A. de tal forma que cada uno de los vértices pertenecientes a ambas subdivisiones se encuentra conectado al resto de los vértices de la otra subdivisión. B y C.

podemos ver a este tipo de gráfica en forma similar a un árbol. Problema ejemplo Árbol Genealógico El parentesco entre marcianos es bastante confuso. por sus siglas en inglés). encontrar este orden no es una tarea trivial. es en las materias de estudios superiores. A esto se le conoce como ordenamiento topológico. seguido por los adultos. se forma un tremendo escándalo. Y el problema se agrava porque un marciano no siempre conoce a todos sus padres (¡y ni se diga de sus abuelos!). Podemos utilizar cualquier forma de recorrer un árbol para encontrar el ordenamiento topológico. ya que estamos acomodando los vértices en cierto orden. Ellos pueden reproducirse cuando quieran y donde quieran. y topológico viene de Topología que es la rama de las matemáticas que estudia problemas geométricos no por la forma del objeto sino por la forma en que está conectado. Nadie se sorprende por tener cientos de hijos. Entrada La primera línea en la entrada estándar contiene solo un número n. después los jóvenes y así sucesivamente. De acuerdo a una tradición centenaria. Teniendo una gráfica acíclica dirigida (DAG. 1 ≤ n ≤ 100 — la cantidad de miembros del Consejo Planetario Marciano. Para respetar jerarquías y no ofender a nadie. Como no hay forma en que nos podamos regresar. Un ejemplo de cuando se dan este tipo de gráficas.Ordenamiento topológico (Topological Sort). se acostumbra cederles la palabra a los marcianos ancianos primero. abuelo. por lo que un marciano puede tener sólo un padre o quizás diez. Problema Tu tarea es escribir un programa que pueda encontrar. ya que un descendiente no puede hablar antes que un superior. un orden que garantice que todos los miembros del Consejo tengan la palabra antes que cualquiera de sus descendientes. Esto puede producir situaciones vergonzosas en el Consejo Planetario. Se tienen que tomar algunas materias antes que otras (materias seriadas). Sin embargo. y para ellos es normal. Además. Pero si por error habla primero el nieto que su. pero es más conveniente utilizar una búsqueda en profundidad ya que es más fácil de implementar. donde la i-ésima línea contiene a la lista de hijos del i-ésimo . en apariencia más joven. pero nunca se puede formar un ciclo (o no se podrían estudiar estas materias). Y pueden hacerlo en grupo. en la entrada existen exactamente n líneas. Los marcianos están acostumbrados a esto. nos interesa encontrar una forma en que podamos acomodar los vértices en línea recta de tal forma que la dirección de los arcos siempre apunte hacia un mismo lado. los miembros del Consejo están numerados de 1 a n. de una vez por todas.

Salida La salida estándar debe contener en una sola línea una serie de números separados por un espacio en blanco. La variable n indica la . puedes escribir cualquiera de ellas. que representa el orden en que van a tomar la palabra los miembros del Consejo. Código La declaración de variables la realizamos entre las líneas 1 y 4. Siempre existirá por lo menos una de ellas. Tomando a cada marciano como un vértice. La lista de hijos es una serie de números en orden arbitrario separados por espacios. la cual puede estar vacía. tenemos que las aristas están dirigidas y no hay ciclos por la misma razón: no es posible que alguien sea ancestro de un ancestro. Si existen varias listas que cumplan las condiciones del problema. La lista (incluso si está vacía) termina con un 0. y a las aristas como descendencia.miembro. Ural: 1022 Solución: Necesitamos que tener a los marcianos ordenados de tal forma que cualquiera de ellos hable antes que sus descendientes.

num[2. vis[3]= FALSE write(2) 3. vis[4]= TRUE Entrada: . num[4. Inicializamos el arreglo de visitados a false. Caso ejemplo 5 0 4510 10 530 30 num[] 1 2 3 4 5 1 FALSE FALSE FALSE FALSE FALSE 2 TRUE FALSE FALSE TRUE TRUE 3 TRUE FALSE FALSE FALSE FALSE 4 FALSE FALSE TRUE FALSE TRUE 5 FALSE FALSE TRUE FALSE FALSE Desarrollo: v 1. En la función t_sort realizamos el ordenamiento topológico. En la línea 16 leemos la cantidad de vértices. Por adyacente en este caso estamos revisando si marciano actual tiene ascendencia. num[2. vis[5]= FALSE 5. vis[2]= FALSE 1.1]= TRUE.3]= TRUE.5]= TRUE. num[2.4]= TRUE.1]= TRUE. desde quienes no tienen ascendencia (mayores) hasta quienes tienen más (menores). num[3. y en las siguientes dos líneas buscamos sus vértices adyacentes. vis[2]= TRUE 5. es una búsqueda en profundidad. es decir. vis[2]= TRUE write(4) 3.3]= TRUE.5]= TRUE. Escribimos el número del vértice hasta el final para empezar desde las hojas hasta la raíz. Como ya habíamos mencionado. num[5. Utilizamos el arreglo vis para saber si ya visitamos determinado vértice. Entre las líneas 15 y 29 tenemos la parte principal del código. vis[4]= FALSE 4. num[4. i es para los ciclos y t la utilizamos para leer los vértices adyacentes.cantidad de vértices. En la línea 9 marcamos el vértice como visitado. y m es la matriz de adyacencia. y realizamos un ordenamiento cada que encontremos un vértice sin visitar (que sería una vez por cada componente). Después leemos la descendencia de cada uno (líneas 19 a 24).

write(5) write(3) write(1) Salida: 24531 Código en C Tiempo de ejecución .

001 162 Fecha Otros problemas .001 218 0.001 0.015 1.Lenguaje Pascal C Tiempos [s] Memoria [Kb] Ejecución Mejor Mediana Peor 04-May-2006 0.101 04-May-2006 0.

Sign up to vote on this title
UsefulNot useful