Skip to content

Instantly share code, notes, and snippets.

@Feh
Created June 15, 2011 09:58
Show Gist options
  • Select an option

  • Save Feh/1026822 to your computer and use it in GitHub Desktop.

Select an option

Save Feh/1026822 to your computer and use it in GitHub Desktop.

Revisions

  1. @invalid-email-address Anonymous revised this gist Jun 15, 2011. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions Labyrinth.java
    Original file line number Diff line number Diff line change
    @@ -55,6 +55,7 @@ public static int[][] makeRandomLabyrinth(int size, double p){
    }
    }
    return labyrinth;
    }

    /**
    * Prints out the Labyrinth and its solution, if possible!
    @@ -91,7 +92,7 @@ public boolean solve(){ //Solve the labyrinth. Return true if the labyrinth is s
    else if (labyrinth[i1+1][i2]==1 && (i1+1)<this.labyrinth.length){
    labyrinth[i1+1][i2]=8;
    i1 = i1+1;
    };
    }
    else if (labyrinth[i1][i2-1]==1 && i2>0){
    labyrinth[i1][i2-1]=8;
    i2 = i2-1;
    @@ -108,7 +109,7 @@ else if (labyrinth[i1][i2+1]==1 && (i2+1)<this.labyrinth.length){
    }
    else if (labyrinth[i1+1][i2]==8 && (i1+1)<this.labyrinth.length){
    i1 = i1+1;
    };
    }
    else if (labyrinth[i1][i2-1]==8 && i2>0){
    i2 = i2-1;
    }
    @@ -147,4 +148,3 @@ public static void main(String args[]){

    }
    }
    }
  2. @invalid-email-address Anonymous created this gist Jun 15, 2011.
    150 changes: 150 additions & 0 deletions Labyrinth.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,150 @@
    /**
    * Assignment 9, exercise 3
    * Class representing a labyrinth
    * Two constructors are already implemented, also a method to print out the labyrinth and its solution
    *
    * @author Lisa Julia Nebel Julius Plenz
    */
    // TODO Take a look how this class works.
    // TODO Look at the docstrings, document your own functions

    // TODO Implement two functions to solve the Labyrinth. You will find the stubs below
    // (solve and solveRightHandRule)

    // TODO Implement the third constructor that generates a labyrinth with given size and given probability
    // test the solvability of 1000 labyrinths of size 10 by 10 with the parameters p=0.8 and p=0.9
    // (p stands for the probability of any entry in the matrix being 1)

    public class Labyrinth{
    int[][] labyrinth; // labyrinth as defined in the assignment
    int[][] solution; // solution to the labyrinth
    Boolean solved; // Is the labyrinth already solved?

    /**
    * Construct a Labyrinth with default size
    */
    public Labyrinth(){
    this.labyrinth=makeRandomLabyrinth(4,0.8);
    this.solved=false;
    }

    /**
    * Construct a Labyrinth with given size and given "1"-probability
    * Not yet implemented!
    */
    public Labyrinth(int size, double p){
    this.labyrinth = makeRandomLabyrinth(size,p);
    }

    public Labyrinth(int[][]labyrinth){
    this.labyrinth=labyrinth;
    this.solved=false;
    }

    /**
    * @param labyrinth size and probability for "1"
    *
    * @return a labyrinth (int[][])
    */
    public static int[][] makeRandomLabyrinth(int size, double p){
    int[][] labyrinth=new int[size][size];
    for (int i1=0; i1<size; i1++) {
    for (int i2=0; i2<size; i2++) {
    double r = Math.random();
    labyrinth[i1][i2]=r<p?1:0; //Question: If r<p, then [i1][i2] = 1, else: then [i1][i2] = 0
    }
    }
    return labyrinth;

    /**
    * Prints out the Labyrinth and its solution, if possible!
    */
    public void printLabyrinth(){ //
    for (int i1=0; i1<this.labyrinth.length; i1++) {
    for (int i2=0; i2<this.labyrinth[i1].length; i2++) {
    System.out.print(this.labyrinth[i1][i2]);
    }
    System.out.println();
    }
    System.out.println();
    if(this.solved){
    for (int i1=0; i1<this.labyrinth.length; i1++) {
    for (int i2=0; i2<this.labyrinth[i1].length; i2++) {
    System.out.print(this.solution[i1][i2]);
    }
    System.out.println();
    }
    }

    }

    public boolean solve(){ //Solve the labyrinth. Return true if the labyrinth is solvable, otherwise return false. change the solution attribute to the solution.
    this.labyrinth = labyrinth;
    if (labyrinth[0][0]==1){
    int i1 = 0;
    int i2 = 0;
    if (i1!= (this.labyrinth.length-1) && i2!=(this.labyrinth.length-1)){
    if (labyrinth[i1-1][i2]==1 && i1>0){
    labyrinth[i1-1][i2]=8;
    i1 = i1-1;
    }
    else if (labyrinth[i1+1][i2]==1 && (i1+1)<this.labyrinth.length){
    labyrinth[i1+1][i2]=8;
    i1 = i1+1;
    };
    else if (labyrinth[i1][i2-1]==1 && i2>0){
    labyrinth[i1][i2-1]=8;
    i2 = i2-1;
    }
    else if (labyrinth[i1][i2+1]==1 && (i2+1)<this.labyrinth.length){
    labyrinth[i1][i2+1]=8;
    i2 = i2+1;
    }
    else {
    labyrinth[i1][i2]=0;

    if (labyrinth[i1-1][i2]==8 && i1>0){
    i1 = i1-1;
    }
    else if (labyrinth[i1+1][i2]==8 && (i1+1)<this.labyrinth.length){
    i1 = i1+1;
    };
    else if (labyrinth[i1][i2-1]==8 && i2>0){
    i2 = i2-1;
    }
    else if (labyrinth[i1][i2+1]==8 && (i2+1)<this.labyrinth.length){
    i2 = i2+1;
    }

    }

    }
    }
    return false;
    }

    public boolean solveRightHandRule(){ //implement the right-hand-rule explained in the assignment

    return false;
    }

    public static void main(String args[]){

    System.out.println("Aufgabe 3a:");
    int[][] testLab={{1,0,1,1},{1,1,1,1},{0,1,0,1},{0,1,0,1}};
    Labyrinth L1=new Labyrinth(testLab);
    L1.solve();
    L1.printLabyrinth();
    Labyrinth L2=new Labyrinth();
    L2.solve();
    L2.printLabyrinth();

    System.out.println("Aufgabe 3b:");
    Labyrinth L3=new Labyrinth(testLab);
    L3.solveRightHandRule();
    L3.printLabyrinth();


    }
    }
    }