BJ 3109パン屋さん


https://www.acmicpc.net/problem/3109
すべての状況を複雑に調査しようとすると、かえって実現しにくく、実行時間も長い.
左から右へのパイプラインを尋ねる最大数です.
最も異なるパイプラインに影響を及ぼさないように左上から上に伸ばし、接続できない場合は、パイプラインを再インストールしていない状態に戻せばよい.
package day0217;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Bread {
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	static StringTokenizer st;
	static int count = 0, N, M, max = 0;
	static int[] dir = { -1, 0, 1 };
	static char[][] map;
	static boolean recur(int x, int y) {
		if (y == M - 1) {
			return true;
		}
		for (int i = 0; i < 3; i++) {
			if (x + dir[i] >= 0 && x + dir[i] < N && map[x + dir[i]][y + 1] != 'x') {
				map[x + dir[i]][y + 1] = 'x';
				if(recur(x + dir[i], y + 1)) {
					return true;
				}
			}
		}
		return false;
	}
	static void print() {
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < M; j++) {
				System.out.print(map[i][j]);
			}
			System.out.println();
		}
		System.out.println();
	}
	public static void main(String[] args) throws IOException {
		st = new StringTokenizer(br.readLine(), " ");
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		map = new char[N][M];
		for (int i = 0; i < N; i++) {
			map[i] = br.readLine().toCharArray();
		}
		for (int i = 0; i < N; i++) {
			if(recur(i, 0)) count++;
		}
		System.out.println(count);
	}
}