Nombre Password [ Regístrate ]

Redes (OIE 1 Fase 2 - 1997)

 

Apartado 1

Definimos una red como un conjunto de elementos más un conjunto de arcos que unen pares de elementos diferentes; consideraremos que los elementos son números naturales de 1 a una cierta cota N. Por ejemplo, una red puede constar de los naturales {1, 2, 3, 4} y del conjunto de arcos {(1, 2), (2, 4), (3, 4)}. Una red puede representarse gráficamente:

Destacamos que los arcos están dirigidos, es decir, los arcos (1, 2) y (2, 1) son diferentes.
Diremos que una secuencia C de naturales está ordenada respecto una red R si se cumplen las tres condiciones siguientes:

  • C no contiene elementos repetidos.
  • Los elementos de C y de R coinciden.
  • Si existe un arco (a, b) en R, entonces a aparece antes que b en C.

Así, las secuencias 1 2 3 4, 1 3 2 4 y 3 1 2 4 están ordenadas respecto la red del ejemplo anterior, pero no sucede lo mismo con las secuencias 1 2 3 2 4, 1 2 3 ni 1 2 4 3, pues violan alguna de las tres condiciones establecidas.
Se pide un programa capaz de determinar si una secuencia está ordenada respecto una red. Dicho programa debe procesar un fichero de entrada, de nombre "RED1.DAT", que contendrá la configuración de la red y diversas secuencias. El formato exacto es el siguiente:

Línea 1: un carácter numérico (dígito) que representa el valor de N (comprendido entre 1 y 9).

Líneas siguientes: cada línea contendrá una o más parejas de valores naturales, representando cada una de ellas un arco entre dos elementos de la red. Cada natural se representa mediante un dígito; dos naturales consecutivos están siempre separados por un único espacio en blanco.

Una línea que contiene únicamente una aparición del carácter '0'.

Líneas siguientes: cada línea representa una secuencia a examinar y contendrá diversos valores naturales, separados por un único espacio en blanco, y representados cada uno de ellos por un dígito.

La salida debe almacenarse en el fichero "RED1.RES" y debe contener tantas líneas como secuencias a examinar. Cada línea contendrá o bien la palabra 'SI' o bien la palabra 'NO' (en mayúsculas) dependiendo de si la secuencia correspondiente está ordenada respecto la red o no.

A continuación, se codifica la red del ejemplo anterior y algunas secuencias respecto ella, así como el resultado esperado:

RED1.DAT

4
1 2 3 4 2 4
0
1 2 3 4
1 2 3 2 4
1 2 3
1 3 2 4
2 1 3 4
3 1 2 4

RED1.RES

SI
NO
NO
SI
NO
SI

Para simplificar el problema, podéis suponer en este apartado y en todos los que siguen, que no habrá errores de formato en la entrada.

 

Apartado 2

Decimos que dos redes A y B son similares si se cumplen las condiciones siguientes:

  • Tienen los mismos elementos.
  • B tiene los mismos arcos que A, utilizando una renumeración de los elementos de A.

Por ejemplo, la red A con elementos {1, 2, 3, 4} y arcos {(3, 1), (4, 2), (1, 2)} es similar a la red del apartado anterior (llamémosla B) si renumeramos los elementos de A de la forma siguiente: 1, como 2; 2, como 4; 3, como 1; y 4, como 3. La similitud queda patente dibujando ambas redes una junto a otra:

Se pide construir un programa que, dadas dos redes, determine si son similares o no. Puede suponerse que, en caso de ser similares, habrá una sola renumeración de los elementos de la primera de las redes que permita obtener la condición de similitud. El programa debe procesar el fichero de entrada, de nombre "RED2.DAT", que contendrá la configuración de ambas redes. El formato exacto es el siguiente:

Línea 1: un carácter numérico (dígito) que representa el valor de N para la red A.

Líneas siguientes: cada línea contendrá una o más parejas de valores naturales, representando cada una de ellas un arco entre dos elementos de la red A. Cada natural se representa mediante un dígito; dos naturales consecutivos están siempre separados por un único espacio en blanco.

Una línea que contiene únicamente una aparición del carácter '0'.

Línea siguiente: un carácter numérico (dígito) que representa el valor de N para la red B.

Líneas siguientes: cada línea contendrá una o más parejas de valores naturales, representando cada una de ellas un arco entre dos elementos de la red B. Cada natural se representa mediante un dígito; dos naturales consecutivos están siempre separados por un único espacio en blanco.

La salida debe almacenarse en el fichero "RED2.RES" y debe contener una única línea. Dicha línea contendrá la palabra 'NO' (en mayúsculas) si las redes no son similares, mientras que si lo son deberá contener la renumeración (única) que asegura dicha condición. La renumeración se escribirá como una secuencia de valores naturales, separados por un único espacio en blanco, y representados cada uno de ellos mediante un dígito; el valor que aparece en posición k en la línea representa la renumeración del elemento k de A. Así, para el ejemplo anterior, el fichero "RED2.RES" debe contener los valores 2 4 1 3, en este orden:

RED2.DAT

4
4 2 3 1 1 2
0
4
1 2 3 4 2 4

RED2.RES

2 4 1 3

 

Apartado 3

Decimos que la secuencia C es un camino dentro de una red R si C es una secuencia de elementos de R tales que existe un arco entre todo par de elementos consecutivos. Así, las secuencias 3 4 y 1 2 4 son caminos dentro la red ejemplo del primer apartado, pero no lo son ni 1 2 3 ni 4 2 1.

Decimos que la red A es la extensión de la red B si se cumplen las condiciones siguientes:

  • Ambas redes tienen los mismos elementos.
  • Si existe un camino de m a n en B, entonces existe un arco de m a n en A.

Es decir, la extensión de una red consiste en hacer explícitos todos los caminos que existen en dicha red, añadiendo arcos adicionales. La figura siguiente muestra un ejemplo de extensión de una red que requiere añadir cuatro nuevos arcos:

Se pide un programa que, dada una red, construya su extensión. Dicho programa debe procesar un fichero de entrada, de nombre "RED3.DAT", que contendrá la configuración de la red en el mismo formato que los apartados anteriores:

Línea 1: un carácter numérico (dígito) que representa el valor de N para la red.

Líneas siguientes: cada línea contendrá una o más parejas de valores naturales, representando cada una de ellas un arco entre dos elementos de la red. Cada natural se representa mediante un dígito; dos naturales consecutivos están siempre separados por un único espacio en blanco.

La salida debe almacenarse en el fichero "RED3.RES" y debe contener todos los arcos de la red construida. Cada arco se almacenará en una única línea, de la manera habitual:

En toda línea: una pareja de valores naturales, separados por un único espacio en blanco, y representados cada uno de ellos por un dígito. Cada pareja representa un arco entre dos elementos de la red.

Las líneas de la salida deben aparecer ordenadas: primero, los arcos que salen del elemento 1 ordenadamente según el elemento al que van a parar; a continuación, los que salen del elemento 2 ordenadamente según el elemento al que van a parar; etc. A continuación, se muestra el contenido de los ficheros para la red del ejemplo anterior:

RED3.DAT

5
1 3 2 3
3 4 3 5

RED3.RES

1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5

 

Apartado 4

Decimos que la red A es una simplificación de la red B si se cumplen las condiciones siguientes:

  • Ambas redes tienen los mismos elementos.
  • El conjunto de arcos de A está incluido en el conjunto de arcos de B.
  • La extensión de A y B es la misma.

Decimos además que A es una simplificación mínima de B si no existe ninguna simplificación de B con menos arcos que A. Es decir, una simplificación mínima de una red consiste en quitar todos los arcos que se pueda pero conservando los caminos que hay dentro de la red: si hay un camino entre dos elementos dentro de B, este camino debe existir también dentro de A. En la figura siguiente mostramos una red (izquierda) y su simplificación mínima (derecha):

Se pide un programa que, dada una red, construya una simplificación mínima (puede haber más de una). Dicho programa debe procesar un fichero de entrada de nombre "RED4.DAT" y generar otro de salida de nombre "RED4.DAT", siendo la descripción de ambos idéntica a la de "RED3.DAT" y "RED3.RES", respectivamente. Así, el ejemplo anterior puede representarse con los ficheros:

RED4.DAT

5
1 2 3 4 2 4 1 4
2 5 4 5 3 5

RED4.RES

1 2
2 4
3 4
4 5

 



© (2001-2008) ALGORITMIA.NET - Política de privacidad