• 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

Object Storage Arubacloud
0 głosów
478 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,759 wizyt
pytanie zadane 21 kwietnia 2015 w C i C++ przez pulpet112 Użytkownik (760 p.)
0 głosów
2 odpowiedzi 915 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez Wiciorny Ekspert (270,150 p.)
0 głosów
1 odpowiedź 1,833 wizyt

92,573 zapytań

141,423 odpowiedzi

319,648 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...