Informatika gyűjtemény

Egy szinttel feljebb fg_vgy.java

2004050607080910

NézetNyomtat

fg_vgy.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: us-ascii
Méret: 1 KB
package watersheds;
import java.io.*;
import java.util.*;

public class Main {
    String inputFile = "B-large-practice.in";
        String outputFile = "B-large-practice.out";

    int ngbs[][] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
    int[][] map;
    char[][] res;
    int W, H;
    char next;

    boolean next(int[] ij) {
        boolean got = false;
        int best = map[ij[0]][ij[1]];
                int i0 = ij[0];
                int i1 = ij[1];
        for (int i = 0; i < 4; i++) {
            int i2 = i0+ngbs[i][0];
            int j2 = i1+ngbs[i][1];
            if (i2 < 0 || i2 >= H || j2 < 0 || j2 >= W) continue;
            if (map[i2][j2] < best) {
                best = map[i2][j2];
                ij[0] = i2; ij[1] = j2;
                got = true;
            }
        }
        return got;
    }

    void apply(int[] sij) {
        int[] ij = {sij[0], sij[1]};
        while (res[ij[0]][ij[1]] == 0 && next(ij)) ;
        char cur = res[ij[0]][ij[1]];
        if (cur == 0) {
            cur = next; next++;
        }
        ij[0] = sij[0]; ij[1] = sij[1];
        while (res[ij[0]][ij[1]] == 0) {
            res[ij[0]][ij[1]] = cur;
                        if (!next(ij)) break;
        }
    }

    void solve(Scanner in, PrintWriter out) {
        H = in.nextInt();
        W = in.nextInt();
        map = new int[H][W];
        res = new char[H][W];
        next = 'a';
        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                map[i][j] = in.nextInt();
            }
        }
        for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                if (res[i][j] == 0) apply(new int[] {i, j});
                out.print(res[i][j]+" ");
            }
            out.println();
        }
    }

    void run() throws FileNotFoundException {
        Scanner in = new Scanner(new File(inputFile));
        PrintWriter out = new PrintWriter(new File(outputFile));
        int T = in.nextInt();
        for (int case_nr = 1; case_nr <= T; case_nr++) {
            out.println("Case #"+case_nr+":");
            solve(in, out);
        }
        in.close(); out.close();
    }

    public static void main(String args[]) throws FileNotFoundException {
            new Main().run();
        }
}
(Vissza)