• 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

VPS Starter Arubacloud
0 głosów
296 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 90 wizyt
pytanie zadane 27 września 2019 w PHP przez gambi Początkujący (350 p.)
0 głosów
2 odpowiedzi 142 wizyt
pytanie zadane 9 marca 2018 w PHP przez Bartess Gaduła (3,630 p.)
0 głosów
1 odpowiedź 261 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...