/* P-I-2 Zasypane mesto * Jakub Ruzicka * ctete mesto.txt */ #include #include #include using namespace std; int main ( int argc, char *argv[] ) { // vstupni a vystupni soubory... ifstream vstup("mesto.in"); ofstream vystup("mesto.out"); // nacteme zakladni promenne unsigned int m,n; unsigned long int k; if( !( (vstup >> m) && (vstup >> n) && (vstup >> k) ) ) { cerr << "Chyba na vstupu(nepodarilo se nacist zakladni promenne)\n"; exit(EXIT_FAILURE); } unsigned int mesto[m][n]; // pole, do ktereho si ulozime mesto unsigned int r=0,s=0; // na kterem radku a sloupci zrovna jsme ? unsigned int p,vypln=1; // p - kolik nasledujicich poli je tvoreno piskem/kamenim; vypln - pisek/kameni ? // pro jistotu vynulujeme mesto, 0 pro kameni, 1 pro pisek for(unsigned int e=0;e> p; for(unsigned int j=0;j=m) { // jsme na konci radku r=0; s++; // dalsi radek if(s>=n) { // presahli jsme plochu mesta - konec cerr << "Chyba na vstupu (pocet zadanych poli je vetsi nez plocha mesta)\n"; //exit(EXIT_FAILURE); } } } if(vypln) vypln=0; else vypln=1; // prohodime vypln } // tak a ted to dulezite, spocitame mistnosti. // postupne projdeme cele mesto. kdyz narazime na pisek, zaznamename si // nalezenou mistnost a celou ji zaplnime, aby pozdeji nebyla pripocitana // znovu pri nalezu jeji dalsi casti. vector x,y; // souradnice policek pisku v mistnosti vector::iterator ii; unsigned int X,Y; // pomocne promenne, ktere snad usetri trochu vypocet. casu unsigned long int pocet=0; // pocet mest // tak, jdeme na to... for(unsigned int f=0;f0) && (mesto[X][Y-1])) { x.push_back(X); y.push_back(Y-1); } if((Y0) && (mesto[X-1][Y])) { x.push_back(X-1); y.push_back(Y); } if((X