Shikaku. Compta illa X21728


Statement
 

pdf   zip

thehtml

En el joc del Shikaku, una illa es defineix com un grup de cel·les que estan agrupades de manera que formen un quadrat o rectangle. Una de les condicions que ha complir una illa correcta és que totes les cel·les que pertanyen a aquesta illa tinguin el mateix identificador.

Fes una funció que compti el nombre de cel·les de la matriu mat l’identificador de les quals és igual a id i pertanyen a la illa definida per la cantonada superior esquerra(f1, c1) i la cantonada inferior dreta (f2, c2). En concret aquesta funció torna:

  • el nombre de caselles de la illa que són iguals a id si la illa és correcta.
  • 0 si la illa no és correcta.

Interfície

unsigned int compta_illa(const Matriu &mat, char id, unsigned int f1, unsigned int c1, unsigned int f2, unsigned int c2);

Definició de tipus i tuples

La tupla Casella i el tipus Matriu estan definits de la següent manera:

// Casella d’un tauler de shikaku struct Casella { char id = '0'; // Identificador de la casella // Inv: id és una lletra majúscula o ’0’ (no té cap valor assignat). int num = 0; // Nombre de caselles que ha de tenir la illa // Inv: num > 0 (si la casella té un valor inicial) o num == 0 // (si la casella no té un valor inicial) }; // Tauler de shikaku typedef vector<vector<Casella>> Matriu;



IMPORTANT: En la solució que enviïs a jutge cal que al principi posis la declaració de la tupla Casella i el tipus Matriu que et donem.

Precondició

mat no és buida, 0 <= f1 <= f2 < mat.size() i 0 <= c1 <= c2 < mat[0].size()

Observació

Has d’enviar la declaració de la tupla Casella, el tipus Matriu i la funció requerida; el programa principal serà ignorat.

Exemples

Donada la següent matriu mat (de la qual es mostra només l’dentificador de cada cel·la):

 A A A A A
 A A A A A
 B B B C 0
 D D E F F
 D D D 0 0

les següents crides a la funció generen el resultats indicats:

compta_illa(mat, 'A', 0, 0, 1, 1) = 4 compta_illa(mat, 'A', 0, 0, 2, 2) = 0 compta_illa(mat, 'A', 0, 1, 1, 4) = 8 compta_illa(mat, 'B', 2, 2, 2, 2) = 1 compta_illa(mat, 'C', 2, 3, 2, 4) = 0 compta_illa(mat, 'D', 3, 0, 4, 2) = 0
Information
Author
Bernardino Casas
Language
Catalan
Official solutions
C++
User solutions
C++