[C++] Funkcja sprawdzająca czy wieże się szachują

weronika_gee
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 30 lis 2015, o 12:22
Płeć: Kobieta
Lokalizacja: Kraków

[C++] Funkcja sprawdzająca czy wieże się szachują

Post autor: weronika_gee »

Dany jest tablica int t[8][8]. Stojące na szachownicy figury oznaczone są liczbami całkowitymi np. biała wieża to 5, a czarna –5, itd. Proszę napisać funkcję, która sprawdza czy jakiekolwiek wieże szachują się wzajemnie.

Wiem, że wystarczy sprawdzić czy wiersz lub kolumna elementów tablicy, na których "stoją" wieże są równe. Natomiast nie wiem jak zidentyfikować te wieże, zapisać wiersz i kolumnę, na której się znajdują i później przekazać te parametry do funkcji. Może ktoś ma lepszy pomysł na wykonanie tego zadania. Proszę o wyjaśnienie sposobu wykonania lub kod, programuję dopiero od niedawna.
Ostatnio zmieniony 1 gru 2015, o 10:29 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
lukequaint
Użytkownik
Użytkownik
Posty: 219
Rejestracja: 5 maja 2010, o 18:27
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 1 raz
Pomógł: 75 razy

[C++] Funkcja sprawdzająca czy wieże się szachują

Post autor: lukequaint »

W funkcji możesz przyjmować albo tablicę, albo jakiś kontener z biblioteki standardowej, np. std::vector (będzie najwygodniejszy). Co masz na myśli pisząc zidentyfikować? Jak rozumiem masz same wieże na szachownicy, tak (w drugim zdanie Twojego posta jest mowa o "figurach")? Możesz po prostu użyć wartości \(\displaystyle{ +1}\) (biała wieża), \(\displaystyle{ -1}\) (czarna wieża). W przypadku różnych figur, możesz je identyfikować przez wartość bezwzględną, np. (król: \(\displaystyle{ 1}\), wieża: \(\displaystyle{ 2}\), ...).

Niżej kod wczytujący pozycję i kolory wież. Wystarczy wypełnić funkcję szach, by sprawdzała to co trzeba.

Kod: Zaznacz cały

#include <iostream>
#include <vector>

bool szach(std::vector<std::vector<int> > szachownica)
{
    return false;
}

int main()
{
    std::vector<std::vector<int> > v(8, std::vector<int>(8, 0));
    int n = 0; // liczba wiez
    std::cin >> n;
    for (int i = 0; i < n; ++i)
    {
        int x = 0; // wspolrzedna x na szachownicy
        int y = 0; // wspolrzedna y na szachownicy
        int kolor = 0; // kolor wiezy
        std::cin >> x >> y >> kolor;
        // jesli podamy kolor > 0
        // na szachownicy pojawi sie -1
        // w przeciwnym wypadku 1
        v[y][x] = (kolor > 0) ? 1 : -1;
    }
    std::cout << (szach(v) ? "tak" : "nie") << "
";
}
ODPOWIEDZ