Cod sursa(job #2788995)

Utilizator cosmin1812Nedelcu Adrian Cosmin cosmin1812 Data 26 octombrie 2021 19:14:27
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<queue>
using namespace std;


class Graf
{

private:

	int nr_noduri;
	int nr_muchii;
	int start;
	vector<int>init;
	vector<int>fin;


public:

	Graf() {

		ifstream f("bfs.in");
		int x, y;
		f >> nr_noduri;
		f >> nr_muchii;
		f >> start;

		while (f >> x >> y) {

			init.push_back(x);
			fin.push_back(y);
		}

	}

	int get_nr_noduri() { return nr_noduri; }
	void set_nr_noduri(int n) { nr_noduri = n; }

	int get_nr_muchii() { return nr_muchii; }
	void set_nr_muchii(int m) { nr_muchii = m; }

	int get_start() { return start; }
	void set_start(int s) { start = s; }

	string get_muchii() {

		string text;

		int i;
		for (i = 0; i < nr_muchii; i++) {

			text += "\n" + to_string(init[i]) + " " + to_string(fin[i]);

		}

		return text;
	}


	void bfs1() {

		vector<int> vizit;
		for (int i = 0; i <= nr_noduri; i++) { vizit.push_back(-1); }

		queue<int>coada;
		int x;

		//cout << start << ", ";
		coada.push(start);
		vizit[start] = 0;

		while (!coada.empty()) {

			x = coada.front();
			coada.pop();//stergem primul element din coada

			for (int i = 0; i < nr_muchii; i++) {

				if (init[i] == x && vizit[fin[i]] == -1) {
					coada.push(fin[i]);
					//cout << fin[i] << ", ";
					vizit[fin[i]] = vizit[init[i]] + 1;
				}
			}
		}

		for (int i = 1; i <= nr_noduri; i++) {

			cout << vizit[i] << " ";
		}
	}

};


int main() {

	Graf* g = new Graf;

	g->bfs1();


	return 0;
}