Below is the syntax highlighted version of Percolation.java
from §2.4 Case Study: Percolation.
/************************************************************************* * Compilation: javac Percolation.java * Execution: java Percolation < input.txt * * % more testD.txt * 8 8 * 0 0 0 1 1 1 0 1 * 1 1 1 0 0 1 1 1 * 1 0 1 0 0 1 0 0 * 1 0 1 1 1 1 0 1 * 1 0 0 1 0 1 0 0 * 1 1 0 1 0 0 1 0 * 0 1 1 0 0 1 1 1 * 0 0 1 0 0 0 0 0 * * % java Percolation < testD.txt * 8 8 * 0 0 0 1 1 1 0 1 * 1 1 1 0 0 1 1 1 * 1 0 1 0 0 1 0 0 * 1 0 1 1 1 1 0 0 * 1 0 0 1 0 1 0 0 * 1 1 0 1 0 0 0 0 * 0 1 1 0 0 0 0 0 * 0 0 1 0 0 0 0 0 * true * *************************************************************************/ public class Percolation { // given an N-by-N matrix of open sites, return an N-by-N matrix // of sites reachable from the top public static boolean[][] flow(boolean[][] open) { int N = open.length; boolean[][] full = new boolean[N][N]; for (int j = 0; j < N; j++) { flow(open, full, 0, j); } return full; } // determine set of full sites using depth first search public static void flow(boolean[][] open, boolean[][] full, int i, int j) { int N = open.length; // base cases if (i < 0 || i >= N) return; // invalid row if (j < 0 || j >= N) return; // invalid column if (!open[i][j]) return; // not an open site if (full[i][j]) return; // already marked as full // mark i-j as full full[i][j] = true; flow(open, full, i+1, j); // down flow(open, full, i, j+1); // right flow(open, full, i, j-1); // left flow(open, full, i-1, j); // up } // does the system percolate? public static boolean percolates(boolean[][] open) { int N = open.length; boolean[][] full = flow(open); for (int j = 0; j < N; j++) { if (full[N-1][j]) return true; } return false; } // test client public static void main(String[] args) { boolean[][] open = StdArrayIO.readBoolean2D(); StdArrayIO.print(open); StdOut.println(); StdArrayIO.print(flow(open)); StdOut.println(percolates(open)); } }