Hetman - rozwiązanie iteracyjne (obiektowe)
Kod był wyświetlany 1717 razy.
    /*
  Name: Hetman - rozwiązanie iteracyjne (obiektowe)
  Copyright: GPL GNU
  Date: 19-09-2007 19:48:31
  Description: 
  Na szachownicy o wymiarach nxn umieść n hetmanów w ten sposób, aby żadne 
  z nich się nie szachowały.
*/

#include <conio.h>
#include <iostream>
using namespace std;

class Hetman
{
    int x,y,w;
    public:
        
    void Inicjuj(int n, int k)
    {
        x=0;y=k;w=n;
    }
    bool CzyBije(int a, int b)
    {
		if(a==x||b==y)
			return true;
        int tmp1=x-a,tmp2=y-b;
		if(tmp1<0)
			tmp1=-tmp1;
		if(tmp2<0)
			tmp2=-tmp2;
		if(tmp1==tmp2)
			return true;
		return false;
    }
    void ZmienPozycje(int a, int b)
    {
        x=a;y=b;
    }
    int ZwrocX()
    {
        return x;
    }
    
};
int main()
{
    cout<<"Podaj n: ";
    int n;
    cin>>n;
    Hetman *tablica=new Hetman[n];
    for(int i=0;i<n;i++)
        tablica[i].Inicjuj(n,i);
	tablica[0].ZmienPozycje(0,0);
    int i=1;
    while(i<n&&i>=0)
    {
        bool czy=false;
        for(int j=0;j<i;j++)
            if(tablica[j].CzyBije(tablica[i].ZwrocX(),i))
            {
                czy=true;
                break;
            }
            if(!czy)
                i++;
            else
            {
                while(tablica[i].ZwrocX()==n-1)
                {
                    tablica[i].ZmienPozycje(0,i);
                    i--;
                }
                tablica[i].ZmienPozycje(tablica[i].ZwrocX()+1,i);        
            }
    }
	if(i<0)
		cout<<"Dla n rownego "<<n<<" nie istnieje rozwiazanie!";
	else
	{
		char **wynik=new char*[n];
		for(int j=0;j<n;j++)
			wynik[j]=new char[n];
		for(int j=0;j<n;j++)
			for(int z=0;z<n;z++)
			{
				if((z+j)%2)
					wynik[j][z]='x';
				else
					wynik[j][z]='o';
			}
		cout<<"\n\n";
        for(i=0;i<n;i++)
			wynik[tablica[i].ZwrocX()][i]='H';
		for(int j=0;j<n;j++)
		{
			for(int z=0;z<n;z++)
			{
				cout<<wynik[j][z];
			}
			cout<<endl;
		}
	}
    getch();
    return 0;
}    
Pobierz plik tekstowy
Administrator WJL
PHP&SQL coded by NOVA-IT