Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <numeric>
- #include <set>
- using namespace std;
- void dfs(int startNode,int parent, vector<int> myVec[], vector<bool>* visited,vector<int>* savedPath){
- savedPath->push_back(startNode);
- cout << "Visited " << startNode <<", Parent " << parent << endl;
- visited->at(startNode) = true;
- for(int i=0;i<myVec[startNode].size();i++){
- int posValue = myVec[startNode][i];
- if(!visited->at(posValue)) dfs(posValue,startNode,myVec,visited,savedPath);
- }
- }
- 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> savedPath;
- in.clear();
- in.seekg(1);
- while(in >> data1 && in >> data2){
- vecData[data1].push_back(data2);
- vecData[data2].push_back(data1);
- }
- in.close();
- cout << "\n\tDFS\n" << endl;
- for(int i=0;i<pureData.size();i++){
- if(accumulate(visited.begin(),visited.end(),0) == pureData.size()) break;
- auto it = pureData.begin();
- advance(it,i);
- dfs(*it,*it,vecData,&visited,&savedPath);
- }
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement