Cod sursa(job #2502902)

Utilizator GrimmushAdelin Alexandru Grimmush Data 1 decembrie 2019 19:57:41
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.08 kb
// 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;
}