C++ Algorytm ustawiania pionków na szachownicy

Witam.

Potrzebuję waszej pomocy gdyż mam takie zadanie: http://pastebin.com/8VY4KVg6

No i jak na razie napisałem sobie ten kod:

#include 

using namespace std;


bool dziala (int n, bool ** tab, int k){

	for(int i=0; i < n ; i++){

		if (pole (k,i) nie jest szachowane){//dorobić sprawdzanie czy można ustawić działo.

			tab[k][i]==true;

			if (k==n-1){

				return true;

			}

			if (dziala(n,tab,k+1)){

				return true;

			}

			else {

				tab[k][i]==false;

			}


		}//if

	}//for

	return false; //jeśli funkcja przejży wszystkie pola i nie znajdzie rozwiązania zwraca false.

}//dziala


int main() {

	return 0;

}

Czy możecie mi powiedzieć, czy dobrze kombinuję i ewentualnie podpowiedzieć jak sprawdzić czy można w danym miejscu postawić działo?

Z góry dzięki za pomoc i pozdrawiam.

Raczej Twój kod nie odnosi się do wyszukiwania najmniejszej liczby żołnierzy. Każde działo stoi w osobnym polu i rzędzie. Więc liczby oznaczające rząd na wyjściu muszą wszystkie się różnić. Najprostsze do napisania to wyznaczenie wszystkich kombinacji ustawienia w rzędach, obliczenie sumy żołnierzy potrzebnych do ich ustawienia i wybranie kombinacji o ich najmniejszej sumie. Ale to raczej metoda brutal force, być może da się wymyślić jakiś mniej złożony obliczeniowo algorytm. Zależy po co Ci ten program na konkurs czy też zadanie domowe.

http://forum.4programmers.net/Algorytmy … wzolnierzy

@OP

Jak słusznie zauważył mikolaj_s musisz minimalizować funkcję żołnierzy. Jednak jego sposób dla danych rzedu 10^3 będzie wykonywał się dłużej niż cykl życia naszego wszechświata (inaczej: nie udałoby się obejrzeć wyników przy założeniu odpalenia komputera z takim algorytmem zaraz po wielkim wybuchu)

Poza tym mam wrażenie, że nie rozumiesz treści - w skrócie musisz wybrać dokładnie jedną liczbę z każdej kolumny tak by suma była jak najmniejsza, przy czym wybranie liczby (k,s) (kolumna, szereg) blokuje ci też cały szereg. Czyli zachłannie nie przejdzie, bo czasem możesz wybrać w danym szeregu nie najlepszą opcję, aby nie zablokować najlepszej opcji z innej kolumny. Zapoznaj się z paradygmatem programowania liniowego i minimalizacji funkcji. Mówiąc prościej to zwykły klasyczny problem na algorytm dynamiczny.

@[alex]

To nie jest problem ośmiu hetmanów.

kostek135 , to że jakiś student zatytułował tak post wcale nie oznacza że chodzi o coś innego.

Tam właśnie chodzi o dokładnie to samo zadanie a na końcu jest podany algorytm rozwiązania.

http://forum.4programmers.net/Algorytmy … 6#id980676