/* Problema fotografiei (a numararii obiectelor dintr-o fotografie) */ package bkt; import java.io.*; import java.util.*; public class Fotografie { private int a[][], solutie[][], n, m, nrObiecte; private int du[] = {0, -1, -1, -1, 0, 1, 1, 1, 0}, dv[] = {0, -1, 0, 1, 1, 1, 0, -1, -1}; public Fotografie(String numeFisier) { citireFisier(numeFisier); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) solutie[i][j] = a[i][j]; nrObiecte = 0; for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) if(solutie[i][j] == 1) { umplere(i, j); nrObiecte++; } System.out.println("Numar obiecte in fotografie: " + nrObiecte); } private void citireFisier(String numeFisier) { BufferedReader br; StringTokenizer st; String linie; int i = 0; boolean linia1 = false; try { br = new BufferedReader(new FileReader(numeFisier)); while((linie = br.readLine()) != null) { st = new StringTokenizer(linie, " \n\r\t"); if(!linia1) { n = Integer.parseInt(st.nextToken()); m = Integer.parseInt(st.nextToken()); a = new int[n][m]; solutie = new int[n][m]; linia1 = true; continue; } int j = 0; while(st.hasMoreTokens()) a[i][j++] = Integer.parseInt(st.nextToken()); i++; } br.close(); }catch(Exception e) { System.out.println("Eroare la citirea fisierului " + numeFisier + "."); } } private void umplere(int u, int v) { for(int i = 0; i < 9; i++) if((u + du[i] >= 0 && u + du[i] < n && v + dv[i] >= 0 && v + dv[i] < m) && (solutie[u + du[i]][v + dv[i]] == 1)) { solutie[u + du[i]][v + dv[i]] = 0; umplere(u + du[i], v + dv[i]); } } } //------------Program de test---------------------------- import bkt.*; public class TestFotografie { public static void main(String []args) { Fotografie f = new Fotografie("DateFotografie.txt"); } }