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;
}

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1