Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <numeric>
- #include <set>
- #include <queue>
- using namespace std;
- void bfs(queue<int> myQueue,vector<int> vecData[],vector<bool> visited,vector<int> parent,vector<int> distance){
- if(myQueue.empty())return;
- int currentElement = myQueue.front();
- visited[currentElement] = true;
- myQueue.pop();
- cout << "Visited " << currentElement << ", Distance " << distance[currentElement] <<", Parent " << parent[currentElement] << endl;
- for(int i=0;i<vecData[currentElement].size();i++){
- int data = vecData[currentElement][i];
- if(!visited[data]){
- distance[data] = distance[currentElement]+1;
- parent[data] = currentElement;
- myQueue.push(data);
- }
- }
- bfs(myQueue,vecData,visited,parent,distance);
- }
- int main(){
- ifstream in;
- in.open("/home/deep/Study/CPP/Lab/dfs-data.txt");
- int m,data1,data2;
- in >> m;
- set<int> pureData;
- int p = 0;
- while(in >> data1 && in >> data2){
- pureData.insert(data1);
- pureData.insert(data2);
- p++;
- }
- int n = *pureData.rbegin()+1;
- vector<int> vecData[n];
- vector<bool> visited(n,false);
- vector<int>parent(n,0);
- vector<int> distance(n,0);
- in.clear();
- in.seekg(1);
- while(in >> data1 && in >> data2){
- vecData[data1].push_back(data2);
- vecData[data2].push_back(data1);
- }
- in.close();
- cout << "\n\t BFS\n" << endl;
- queue<int> myQueue;
- myQueue.push(*pureData.begin());
- bfs(myQueue,vecData,visited,parent,distance);
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement