
package jeops.examples.queens;
/**
* Rule base to solve the 8-queens problem. It will enumerate all
* possible solutions to the problem.
*
* @author Carlos Figueira Filho (csff@cin.ufpe.br)
*/
public ruleBase EightQueens {
private int solutionNumber = 1;
rule findSolution {
declarations
Queen q1;
Queen q2;
Queen q3;
Queen q4;
Queen q5;
Queen q6;
Queen q7;
Queen q8;
conditions
q1.getRow() == 1;
q2.getRow() == 2;
q3.getRow() == 3;
q4.getRow() == 4;
q5.getRow() == 5;
q6.getRow() == 6;
q7.getRow() == 7;
q8.getRow() == 8;
!q1.attacks(q2); !q1.attacks(q3); !q1.attacks(q4);
!q1.attacks(q5); !q1.attacks(q6); !q1.attacks(q7);
!q1.attacks(q8);
!q2.attacks(q3); !q2.attacks(q4); !q2.attacks(q5);
!q2.attacks(q6); !q2.attacks(q7); !q2.attacks(q8);
!q3.attacks(q4); !q3.attacks(q5); !q3.attacks(q6);
!q3.attacks(q7); !q3.attacks(q8);
!q4.attacks(q5); !q4.attacks(q6); !q4.attacks(q7);
!q4.attacks(q8);
!q5.attacks(q6); !q5.attacks(q7); !q5.attacks(q8);
!q6.attacks(q7); !q6.attacks(q8);
!q7.attacks(q8);
actions
System.out.println("Solution " + solutionNumber + " to the problem:");
boolean[][] aux = new boolean[9][9]; // To begin couting by 1.
aux[q1.getRow()][q1.getColumn()] = true;
aux[q2.getRow()][q2.getColumn()] = true;
aux[q3.getRow()][q3.getColumn()] = true;
aux[q4.getRow()][q4.getColumn()] = true;
aux[q5.getRow()][q5.getColumn()] = true;
aux[q6.getRow()][q6.getColumn()] = true;
aux[q7.getRow()][q7.getColumn()] = true;
aux[q8.getRow()][q8.getColumn()] = true;
System.out.println("/-------------------------------\\");
for (int i = 1; i <= 8; i++) {
for (int j = 1; j <= 8; j++) {
if (aux[i][j]) {
System.out.print("| o ");
} else {
System.out.print("| ");
}
}
System.out.println("|");
if (i < 8) {
System.out.println("|---|---|---|---|---|---|---|---|");
} else {
System.out.println("\\-------------------------------/");
}
}
solutionNumber++;
}
}
| jeops.examples.queens.Queen |
package jeops.examples.queens; /** * Represents a queen in a chess board. * * @version 0.01 06 Apr 2000 * @author Carlos Figueira Filho (csff@cin.ufpe.br) */ public class Queen { /** * The row of the board (1-8). */ private int row; /** * The column of the board (1-8). */ private int column; /** * Class constructor. * * @param row the row of the board. * @param column the column of the board. */ public Queen(int row, int column) { this.row = row; this.column = column; } /** * Returns the row of this queen. * * @return the row of this queen. */ public int getRow() { return row; } /** * Returns the column of this queen. * * @return the column of this queen. */ public int getColumn() { return column; } /** * Checks whether this queen can be attacked by the given one. * * @param the queen that tries to attack this one * @return |
| TestQueens |
package jeops.examples.queens; /** * Test class used to test the eight queens problem solved using JEOPS. * * @author Carlos Figueira Filho (csff@cin.ufpe.br) */ public class TestQueens { /** * Main entry point of the application. * * @param args command line arguments. None is needed. */ public static void main(String[] args) { EightQueens kb = new EightQueens(); long l1 = System.currentTimeMillis(); for (int i = 1; i <= 8; i++) { for (int j = 1; j <= 8; j++) { kb.assert(new Queen(i,j)); } } long l2 = System.currentTimeMillis(); System.out.println("Asserting time: " + (l2 - l1) + "ms"); kb.run(); } } |