pre{ white-space: pre; } .entry-content pre{ word-wrap: normal; }

深さ優先探索の練習

深さ優先探索の処理の流れがわかりやすくコーディングしてあるサイトを発見したので、忘備録のために書きます。
参考にしたサイトのURL:https://qiita.com/shki/items/cc9806564a2690e90fdb

import java.util.Scanner;

public class Main {

	static final int SIZE = 2;
	static int count = 0;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		dfs(0, 0, 0);
		System.out.println(String.format("全部で%d通り", count));
	}

	public static void dfs(int x, int y, int hosuu) {
		System.out.println(String.format("現在の状態(%d, %d) %d歩目", x, y, hosuu));
		if(x == 2 && y == 2) {
			count++;
			System.out.println(String.format("末端に到着(%d通り目)。一つ前の状態に戻る", count));
			return;
		}
		if(x < SIZE) {
			System.out.println("右へ移動する分岐へ(x + 1)");
			dfs(x + 1, y, hosuu + 1);
			System.out.println(String.format("戻ってきた:状態(%d, %d) %d歩目", x, y, hosuu));
		} else {
			System.out.println("これより右へ進めないため右方向への分岐は行わない");
		}
		if(y < SIZE) {
			System.out.println("下へ移動する分岐へ(y + 1)");
			dfs(x, y + 1, hosuu + 1);
			System.out.println(String.format("戻ってきた:状態(%d, %d) %d歩目", x, y, hosuu));
		} else {
			System.out.println("これより下へ進めないため下方向への分岐は行わない");
		}
		if(hosuu > 0) {
			System.out.println("一つ前の状態に戻る");
		} else {
			System.out.println("一つ前の状態に戻る");
		}
	}

}