Pagini recente » clasament-arhiva-educationala | Cod sursa (job #455281) | Cod sursa (job #455278) | Clasamentul arhivei de probleme | Cod sursa (job #2502902)
// ParcurgereaGrafurilor (BFS si DFS).cpp : This file contains the 'main' function. Program execution begins and ends there.
// Prin parcurgerea grafului G se intelege vizitarea tutror nodurilor plecand de la un nod de plecare vizitand in mod progresiv fiecare nod al grafului
// DFS - parcurgerea in latime a grafurilor - Teoria Grafurilor
// Parcurgerea in latime algoritmul BFS
//
// Se da un graf neorientat cu N noduri si M muchii.
//
// Sa se determine numarul componentelor conexe ale grafului.
//
//Input DATA: Fisierul de intrare dfs.in contine pe prima linie numerele N si M cu semnificatia din enunt,
//iar pe urmatoarele M linii se gasesc cate doua numere X si Y cu semnificatia: exista muchie de la nodul X la nodul Y.
//
//Output DATA: In fisierul de iesire dfs.out se va afisa numarul de componente conexe ale grafului.
//
//
#include "pch.h"
#include <iostream>
#include <fstream> //facem un fstream ca sa putem face read si write in fisiere din exterior.
#include <vector>
using namespace std;
//declaram fstreamurile
ifstream fin("dfs.in");
ofstream fout("dfs.out");
//variabile
const int NLIM{ 100005 };
int N, M;
int vizitat[NLIM];
int insule{ 0 };
//vectori
vector <int> Muchii[NLIM];
/*
1: 2 4
2: 1
3: 5
4: 1
5: 3
6:
*/
//facem functia DFS pentru parcurgere
void DFS(int Nod)
{
vizitat[Nod] = true;
for (unsigned int i = 0; i < Muchii[Nod].size(); i++)
// folosim unsigned int pentru ca aceasta functie nu returneaza elemnte negative
// iar intr-un vector nu poti sa ai -1 elemente
{
int Vecin = Muchii[Nod][i];
if (!vizitat[Vecin]) //vizitat == 0 == false | daca nu punem != 0 == true
DFS(Vecin);
}
}
//facem o functie denumita Citire, in care se va citi totul
void Citire()
{
fin >> N >> M;
for (int i = 1; i <= M; i++)
{
int x, y;
fin >> x >> y;
Muchii[x].push_back(y);
Muchii[y].push_back(x);
//Legatura muchiilor.
}
for (int i = 1; i <= N; i++)
{
if (!vizitat[i])
{
insule += 1;
DFS(i);
}
}
}
int main()
{
Citire();
fout << insule << endl;
return 0;
}