public class Nikolaus
{

  private static int[] zaehl;

  private static void haus_rek (boolean[][] matrix, int start, int kn, int count, String weg)
  {
    String weg_neu;

    for (int i = 0; i < 5; i++)
    {
      if (matrix[kn][i] == true)
      {
        weg_neu = weg + "->" + i;
        if (count == 7)
        {
          zaehl[start]++;
          if (start == 0)
            System.out.println (zaehl[start] + ": " + weg_neu);
          break;
        }
        matrix[kn][i] = false;
        matrix[i][kn] = false;
        haus_rek (matrix, start, i, count+1, weg_neu);
        matrix[kn][i] = true;
        matrix[i][kn] = true;
      }
    }
    zaehl[start+5]++;
  }

  public static void main (String[] args)
  {

    boolean[][] matrix = {{false,true,true,true,false},
                          {true,false,true,true,false},
                          {true,true,false,true,true},
                          {true,true,true,false,true},
                          {false,false,true,true,false}};
                          
    zaehl = new int[10];
                              
    int i;
    String weg;
    for (i = 0; i < 10; i++)
      zaehl[i] = 0;

    System.out.println ("Konstruktionsmöglichkeiten vom Knoten 0 aus:");
    for (i = 0; i < 5 ; i++)
    {
      weg = i + "";
      haus_rek (matrix, i, i, 0, weg);
    }

    for (i = 0; i < 5; i++)
      System.out.println ("-> Von Knoten " + i + " aus gibt es " + zaehl[i] + " Möglichkeiten, " + zaehl[i+5] + " Sackgassen.");

  }

}