深さ優先探索の練習
深さ優先探索の処理の流れがわかりやすくコーディングしてあるサイトを発見したので、忘備録のために書きます。
参考にしたサイトの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("一つ前の状態に戻る"); } } }