8 hetmanów iteracyjnie C/C++

8 hetmanów iteracyjnie C/C++
0

Witam. Mam przerobić problem 8 hetmanów z rekurencji na iterację . Ma ktoś pomysł jak?
będę wdzięczna za pomoc
poniżej moja rekurencja

#include <iostream>
#include <cmath>

using namespace std;

const int n=8;

int poz_y[n];
int licznik=1;

bool czy_wolne(int x, int y)
{
int i;
for (i=0;i<x;i++)
{
if (y==poz_y[i] || abs(x-i)==abs(y-poz_y[i]))
return false;
}
return true;
}

void wypisz()
{
int i;
cout << "\t\t\t" << licznik << ")\t";
for (i=0;i<n;i++)
cout << static_cast<char>('A'+i) << poz_y[i]+1 << " ";
cout << endl;
}

void hetman(int kol=0)
{
int i;
for (i=0; i<n; i++)
{
if (czy_wolne(kol,i))
{
poz_y[kol]=i;
if (kol==n-1)
{
wypisz();
licznik++;
return ;
}
hetman(kol+1);
}
}}

int main ()
{
cout << "\n\n\t\t\t\tPROBLEM OSMIU HETMANOW" ;
cout<<"\n\n\t\tszachowa konwencja zapisu ustawienia hetmanow\n\n\n";
hetman();
cout << "\nIstnieje " << licznik-1 << " mozliwosci ustawienia 8 hetmanow na szachownict tak, aby sie \nwzajemnie nie atakowaly."
<< " Wszystie te kombinacje zostaly przedstawione powyzej.\n\n";

cin.ignore();
getchar();
return 0;
}

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Standardowo: musisz użyć własnego stosu, w C++ masz od tego stack<T>. Zamiast rekurencyjnego wywołania odkładasz sobie stan na stos i kręcisz się pętlą, a zamiast powrotu z rekurencji pobierasz element ze stosu.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
0

mógłbyś podać jakiś przykład? nie widzę tego

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.