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

Generowanie labiryntu metadą Prims'a - losowanie komórek

VPS Starter Arubacloud
0 głosów
431 wizyt
pytanie zadane 11 maja 2018 w C i C++ przez BlinkyShay Obywatel (1,190 p.)

Witam.
Bawię się ostatnio w tworzenie różnych generatorów labiryntów.
Aktualnie tworze jeden który jest oparty na algorytmie Prims'a (z tego co wyczytałem, mogę się mylić ).
Czarne komórki to te które tworzą odnogi ( czyli można się w nich poruszać ), czerwone komórki to te które w danym momencie mogą zostać wybrane aby przedłużyć labirynt ( czyli zamienić je na czarne ).
Mój problem polega na tym że nie wiem jak przechowywać wartości x i y czerwonych komórek.
Muszę gdzieś je zapisywać, oraz móc je potem usuwać czy dodawać inne.  Teoretycznie mógłbym losować x i y a potem sprawdzać w tablicy labiryntu czy pod tym adresem nie ma komórki oznaczonej jako ta do wylosowania, ale takie losowania byłoby bardzo czasochłonne, zwłaszcza pod koniec tworzenia labiryntu. Więc chciałbym losować te komórki z puli tylko tych czerwonych, nie z całej tablicy. Jak przechowywać taką "pule" dla czerwonych komórek?

1 odpowiedź

0 głosów
odpowiedź 11 maja 2018 przez mokrowski Mędrzec (155,460 p.)
std::vector<std::pair<std::size_t, std::size_t>> growing_cells;

 

komentarz 11 maja 2018 przez BlinkyShay Obywatel (1,190 p.)
Wybacz ale niewiele mi to mówi, mógłbyś nieco mi to wyjaśnić?
komentarz 11 maja 2018 przez mokrowski Mędrzec (155,460 p.)

Wektor przechowujący pary umożliwia dodawanie i usuwanie elementów które przechowują 2 współrzędne. Tu masz dokumentację tych elementów:

http://en.cppreference.com/w/cpp/container/vector

http://en.cppreference.com/w/cpp/utility/pair

#include <iostream>
#include <vector>
#include <utility>
#include <cstddef>

int main() {
	std::vector<std::pair<std::size_t, std::size_t>> data;
	std::size_t x;
	std::size_t y;

	std::cout << "Wrowadź 3 pary wartości liczbowych odzielonych spacja i zatwierdzanych enterem\n";
	for(auto i = 0; i < 3; ++i) {
		std::cin >> x >> y;
		// TODO: Kontrola poprawności wprowadzenia... 
		data.emplace_back(x, y);
	}

	std::cout << "Wprowadzono:\n";
	for(const auto& pr: data) {
		std::cout << "x = " << pr.first << " y = " << pr.second << '\n';
	}
}

 

Podobne pytania

+4 głosów
5 odpowiedzi 2,674 wizyt
pytanie zadane 21 kwietnia 2015 w C i C++ przez pulpet112 Użytkownik (760 p.)
0 głosów
2 odpowiedzi 895 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez Wiciorny Ekspert (269,120 p.)
0 głosów
1 odpowiedź 1,814 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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!

...