Informatika gyűjtemény

Egy szinttel feljebb Company.java

2004050607080910

NézetNyomtat

Company.java (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 2 KB
package hu.krivan.szakkor.tagok;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

/**
 *
 * @author Balint Krivan
 */
public class Company {

    private int k;
    /**
     * Itt tároljuk, hogy melyik node-nak ki a gyereke
     */
    private ArrayList<Integer>[] node;
    private int[] order;

    public Company(int k, String[] people) {
        this.= k;
        node = new ArrayList[people.length + 1];
        order = new int[people.length + 1];
        String[] person = new String[3];
        for (int i = 0; i < people.length; i++) {
            person = people[i].split(" ");
            if (node[Integer.valueOf(person[1]) - 1] == null) {
                node[Integer.valueOf(person[1]) - 1] = new ArrayList<Integer>();
            }
            node[Integer.valueOf(person[1]) - 1].add(Integer.valueOf(person[0]) - 1);
            order[Integer.valueOf(person[0]) - 1] = Integer.valueOf(person[2]);
        }
    }

    public void inspect() throws IOException {
        PrintWriter out = new PrintWriter(new FileWriter("tagok.ki"));
        out.println(freeDirectSpotsUnder(0));
        freeSpotsUnder2ndBosses(out);
        out.close();
    }

    private void freeSpotsUnder2ndBosses(PrintWriter out) {
        Integer[] result = new Integer[k];
        if (node[0] != null) {
            for (int boss : node[0]) {
                // bejárjuk a bosst.
                result[order[boss] - 1] = freeSpotsBeyond(boss);
            }
        }
        for (int i = 0; i < result.length; i++) {
            if (!= 0) {
                out.print(" ");
            }
            if (result[i] == null) {
                out.print(0);
            } else {
                out.print(result[i]);
            }
        }
        out.println();
    }

    private int freeDirectSpotsUnder(int i) {
        if (node[i] == null) {
            return k;
        }
        return k - node[i].size();
    }

    private int freeSpotsBeyond(int boss) {
        ArrayList<Integer> queue = new ArrayList<Integer>();
        queue.add(boss);
        int res = 0;
        while (!queue.isEmpty()) {
            int employee = queue.remove(0);
            if (node[employee] != null) {
                queue.addAll(node[employee]);
            }
            res += freeDirectSpotsUnder(employee);
        }
        return res;
    }
}
(Vissza)