Răspuns :
#include <iostream>
using namespace std;
bool z[1001];
int main(){
int v[1001], n, i, j, zone=0;
//Citire date
cin >> n;
for(i=1;i<=n;i++) cin >> v[i];
//Parcurgere case
for(i=1;i<=n;i++){
//Daca casa a fost deja vizitata sari la casa urmatoare
if(z[i]) continue;
//Marcheaza casa ca vizitata. Incrementeaza numarul de zone
z[i]=1;
zone++;
//Treci la casa indicata de v[i] si repeta pana ajungi la o casa deja vizitata, marcand toate casele parcurse ca fiind vizitate.
j=v[i];
while(z[j]==0){
z[j]=1;
j=v[j];
}
}
//Afiseaza rezultat
cout << zone;
return 0;
}

#include <iostream>
using namespace std;
struct Nod {
int value;
Nod* next;
};
Nod* cap = NULL;
void inserareInceput(Nod*& cap, int valoare)
{
Nod* p = new Nod;
p->value = valoare;
p->next = cap;
cap = p;
}
int eInLista(Nod*& cap, int valoare)
{
Nod* temp = cap;
while (temp != NULL)
{
if (valoare == temp->value)
{
return 1;
}
temp = temp->next;
}
return 0;
}
int main()
{
int n, V[1001];
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> V[i];
}
int zone = 0, continuare;
for (int i = 1; i <= n; i++)
{
if (!eInLista(cap, V[i]))
{
inserareInceput(cap, V[i]);
continuare = V[V[i]];
while (continuare != V[i])
{
inserareInceput(cap, continuare);
continuare = V[continuare];
}
zone++;
}
}
cout << zone;
}
Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru întrebări sau asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!