Sigui una matriu d’enters. Aquesta matriu representa una taula de dades de files i columnes ( i ).
Diem que la dependencia ordenada
x -> y entre les columnes x i
y, és vàlida a la matriu M si
i només si per a tot parell de files i i
j (on
)
passa això:
l’ordre que tenen els valors a la columna x a totes
dues files i i j és igual a l’ordre que tenen
els valors a la columna y.
on la relació d’ordre pot ser
o
.
Dit altrament: una dependència ordenada x -> y és vàlida
si i només si per a qualsevol parell de files i,j de
M passa una d’aquestes dues coses:
Si el valor que la fila i té a la columna
x és més gran o igual que el valor que la fila
j té a la columna x, aleshores el valor que la
fila i té a la columna y sigui més gran o
igual que el valor que la fila j té a la columna
y.
o el simètric:
Si el valor que la fila i té a la columna
x és més petit o igual que el valor que la fila
j té a la columna x, aleshores el valor que la
fila i té a la columna y sigui més petit o
igual que el valor que la fila j té a la columna
y.
Per exemple, sigui la taula (matriu) M de 5 files i 4
columnes:
| 1 | 2 | 2 | 1 |
| 1 | 3 | 2 | 2 |
| 2 | 3 | 3 | 1 |
| 3 | 5 | 4 | 2 |
| 2 | 4 | 5 | 1 |
Considerem la dependència ordenada 0 -> 1. Veiem que
els valors de la columna 0 a les files 0 i 1 tenen aquesta
relació d’ordre:
,
que es la mateixa que tenen els valors a la columna 1:
| 1 | 2 | 2 | 1 |
|---|---|---|---|
| 1 | 3 | 2 | 2 |
i també, per exemple, en les files 3 i 4, on tenim i :
| 3 | 5 | 4 | 2 |
|---|---|---|---|
| 2 | 4 | 5 | 1 |
I veiem que en tots dos casos els valors de la columna 1
compleixen la mateixa relació d’ordre. I això passa per a
tot parell de files. Per tant, la dependència ordenada
0 -> 1 és vàlida a M.
En canvi, la dependència ordenada 0 -> 3
no és vàlida perquè, per exemple, a les files 1 i 2 els
valors de la columna 0 tenen aquesta relació:
i els de la columna 3 aquesta:
| 1 | 3 | 2 | 2 |
|---|---|---|---|
| 2 | 3 | 3 | 1 |
En aquest cas, podem dir que les files 1 i 2
invaliden 0 -> 3.
Fes una funció dependencia_ordenada amb la següent
declaració i especificació:
/*
* PRE: M.size() > 0 and M[0].size() > 0 and and 0 <= x,y < M[0].size().
*
* POST: Retorna true si i només si la dependència ordenada x -> y
* és vàlida a la matriu M.
*/
bool dependencia_ordenada(const Matriu& M, int x, int y);
Només cal enviar la funció que us demanem (i les funcions que hagueu pogut declarat vosaltres).
A més, al fitxer que envieu cal que també hi hagi això:
#include <iostream>
#include <vector>
using namespace std;
typedef vector <int> Vector;
typedef vector<Vector> Matriu;
No es pot fer servir l’ordenació del C++:
std::sort. Tampoc no es pot fer servir el mètode
push_back() de la classe vector.
Si voleu, podeu fer servir les funcions min,
max o swap.
Cal tenir en compte que la relació de relació entre dues files
i i j respecte a la dependència
x -> y és simètrica. És a dir, si el
parell de files i i j no invalida la
dependència x -> y, el parell j i
i tampoc. Per això a la definició de la dependència
especifiquem
.
L’entrada és una matriu i una seqüència de dependències ordenades. De la lectura ja se n’encarrega el programa principal.
La sortida són els resultats per a cada dependència ordenada. De l’escriptura també se n’encarrega el programa principal.
Autoria: PRO1
Generació: 2026-01-25T13:18:18.245Z
© Jutge.org, 2006–2026.
https://jutge.org