Cześć, jestem w trakcie pisania programu rozwiązującego problem N - hetmanów. Mam problem ze zrozumieniem logiki przekazywania parametrów do utworzonego obiektu w języku Java. Algorytm wykorzystywany do rozwiązania tego problemu to Breadth First Search.
Klasa Main:
import java.util.*;
public class Main {
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
System.out.print("Podaj liczbe:");
int size = scanner.nextInt();
System.out.println("Rozwiazywanie problemu N hetmanow dla tablicy o rozmiarach:" + size + " x " + size);
NqueenSolver solve = new NqueenSolver();
solve.BFS(size);
System.out.println("Liczba odwiedzonych wezlow: " + solve.visited);
}
}
Klasa NqueenSolver:
import java.util.*;
public class NqueenSolver {
public int visited;
public void BFS(int size) {
Chessboard temp;
int row = 0;
visited = 0;
Queue<Chessboard> queue = new ArrayDeque<Chessboard>();
while(Chessboard.solutions < 1) {
if(queue.peek() != null) {
temp = queue.element();
queue.remove();
}
else {
temp = new Chessboard(size);
}
for (int col = 0; col < size; col++) {
if(temp.isPositionSafe(row, col) != false) {
temp.insertQueen(row, col);
queue.add(temp);
visited++;
}
}
//System.out.println(queue.size());
row++;
}
}
}
Klasa Chessboard:
public class Chessboard {
public static int solutions = 0;
private int boardSize;
private int queensPlaced;
private int[][] board;
public Chessboard(int size) {
// TODO Auto-generated constructor stub
boardSize = size;
board = new int[boardSize][boardSize];
for (int i=0; i<boardSize; i++) {
for (int j=0; j<boardSize; j++) {
board[i][j] = 0;
}
}
}
public void printSolution(){
for (int i=0; i<boardSize; i++) {
for (int j=0; j<boardSize;j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
}
public boolean isPositionSafe(int row, int col) {
for (int i=0; i<col; i++) {
if (board[row][i] != 0){
return false;
}
}
for (int i=row,j=col; i>=0 && j>=0; i--,j--) {
if (board[i][j] != 0) {
return false;
}
}
for (int i=row,j=col;j>=0 && i<boardSize; i++, j--) {
if (board[i][j] != 0) {
return false;
}
}
return true;
}
public void insertQueen(int row, int col) {
board[row][col] = 1;
queensPlaced++;
if(queensPlaced == boardSize) {
solutions++;
printSolution();
}
}
}
Chodzi o to, w jaki sposób do nowo tworzonego węzła w grafie (np. na poziomie 3) przekazać tablicę reprezentującą wstawionych 2 hetmanów oraz zmienną reprezentującą ilość wstawionych hetmanów.
Obecny output:
Podaj liczbe:8
Rozwiazywanie problemu N hetmanow dla tablicy o rozmiarach:8 x 8
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
Liczba odwiedzonych wezlow: 8
Wygląda to tak, jakby zamiast tworzyć osobne tablice dla każdego węzła tworzona jest tylko jedna tablica i do niej wstawiane są hetmany.
Za każdą wskazówkę serdecznie dziękuję :)