• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java - przekazywanie parametrów do obiektu

0 głosów
426 wizyt
pytanie zadane 5 maja 2020 w Java przez baromeister Nowicjusz (140 p.)

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ę :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 142 wizyt
pytanie zadane 27 września 2019 w PHP przez gambi Początkujący (350 p.)
0 głosów
2 odpowiedzi 352 wizyt
pytanie zadane 9 marca 2018 w PHP przez Bartess Gaduła (3,630 p.)
0 głosów
1 odpowiedź 680 wizyt

93,604 zapytań

142,529 odpowiedzi

322,996 komentarzy

63,092 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...