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

Błędne wyświetlenie wyniku programu - problem szachowy

Object Storage Arubacloud
0 głosów
199 wizyt
pytanie zadane 6 kwietnia 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)

Naskrobałem program mający rozwiązywać problem "N-Hetmanów" na szachownicy NxN. Chcę sprawdzać ilość możliwych unikalnych rozwiązań oraz wyświetlać pierwsze znalezione - w tym celu w funkcji sprawdzającej czy pole jest atakowane próbuję przechwycić pierwsze N pozycji hetmanów zapisując wiersze i kolumny do wektorów i wyświetlić je na końcu programu. Program nie wyświetla prawidłowo wszystkich hetmanów - 5 dobrze, 6 zle i kolejnych już wcale. W czym tkwi problem? Próbowałem modyfikować warunek sprawdzający pole, sprawdzałem poprawność funkcji wyświetlania i nie mam pomysłu.

1 odpowiedź

0 głosów
odpowiedź 6 kwietnia 2019 przez mrspock1 Mądrala (6,420 p.)
edycja 7 kwietnia 2019 przez mrspock1
Czy na pewno zrobiłeś to przez BFS? Na wszelki wypadek sprawdź na przykład tutaj pisałem dużo o zagadkach przeszukujących graf i masz tam pseudoprogram. Do BFS potrzebujesz struktury danych typu "kolejka" i algorytm jest iteracyjny.

http://informatyka-delphi.blogspot.com/2018/05/problem-naczyn-odmierzajacych.html

a tu jest aplikacja internetowa która to zadanie liczy (zagadka odmierzanie objętości)

http://zagadki-informatyczne.pl/

Ogólnie algorytmy przeszukujące graf są szybsze bo są rzędu wielomianowego podczas gdy brute force są rzędu wykładniczego.

Zauważ jednak że rozwiązanie tego zadania przez BFS zamiast brute force, przez proste dostosowanie kodu, niczego nie przyspieszy bo brute force w tym przypadku działa na zasadzie przeszukiwania drzewa a nie zwykłego grafu (każda kolejna badana pozycja jest inna). Nie mamy tego korzystnego przypadku jaki jest w grafach, że napotykamy tą samą pozycję w związku z tym już jej ponownie nie przeszukujemy bo wcześniej ją zaznaczyliśmy.

Prawdopodobnie dałoby się problem przedstawić jako graf (eliminacja powtarzania pozycji) jeśliby sprawdzać dla każdej pozycji czy nie istnieje już wcześniej badana pozycja symetryczna, czyli plansza obrócona o 90 stopni. Wtedy pozornie mielibyśmy trochę przyspieszenie, w tym przypadku niewielkie. Faktycznie jednak algorytm brute force też może mieć to zaimplementowane w taki sam sposób bo z warunków zadania wynika że brute force jest w stanie określić czy pozycja symetryczna już była wcześniej przeszukiwana.

Typowe zadania na algorytmy grafowe opierają się na tym, że nie da się ich zamienić na brute force bo nie wiemy czy dojście do pozycji symetrycznej na pewno musiało być badane wcześniej. Wybrany został zły problem do tego zadania bo to nie jest typowy problem grafowy, gdyż można go z taką samą efektywnością rozwiązać przez brute force.

Podobne pytania

0 głosów
1 odpowiedź 151 wizyt
pytanie zadane 14 maja 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 966 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)
0 głosów
1 odpowiedź 910 wizyt
pytanie zadane 23 stycznia 2019 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)

92,543 zapytań

141,386 odpowiedzi

319,498 komentarzy

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

...