[ create a new paste ] login | about

Link: http://codepad.org/LA9LS7se    [ raw code | output | fork ]

pshirishreddy - C++, pasted on Nov 5:
#include <iostream>
#include <map>
#include <set>

using namespace std;

int timed;
map<int,int> d;
map<int,int> f;
map<int,int> preceed;
map<int, string> color;
set<int> vertex;

void dfs(map<int, int> G);
void dfs_visit(int u, set<int> vertices, map<int,int> m);
void display();

int main()
{
	map<int , int> m;
	m[1] = 2;
	m[1] = 4;
	m[2] = 5;
	m[5] = 4;
	m[4] = 2;
	m[3] = 5;
	m[3] = 6;
	m[6] = 6;
	
	dfs(m);
	display();
	cout<<timed;
	return 0;
}

void dfs( map<int, int> m)
{
	map<int , int> :: iterator it;
	
	set<int> vertices;
	set<int> :: iterator vit;
	
	
	for(it = m.begin(); it != m.end(); it++) {
		vertices.insert((*it).first);
		vertices.insert((*it).second);
		color[(*it).first] = "white";
		color[(*it).second] = "white";
	}
	vertex = vertices;
	timed = 0;
	for(vit = vertices.begin(); vit != vertices.end(); vit++) {
		if(color[*vit] == "white") {
			dfs_visit(*vit, vertices, m);
		}
	}
}

void dfs_visit(int u, set<int> vertices,  map<int,int> m) 
{
	set<int> :: iterator vit;
	color[u] = "gray";
	timed+=1;
	d[u] = timed;
	
	for(vit = vertices.begin(); vit!=vertices.end(); vit++) {
		if( m[u] == *vit && color[*vit] == "white") {
			preceed[*vit] = u;
			dfs_visit(*vit, vertices, m);
		}
	}
	color[u] = "black";
	timed+=1;
	f[u] = timed+1;
}

void display()
{
	set<int> :: iterator it;
	for(it = vertex.begin(); it!=vertex.end(); it++) {
		cout<<"discovery time of: "<<*it<<" is: "<<d[*it]<<", finish time: "<<f[*it]<<"\n";
	}
}


Output:
1
2
3
4
5
6
7
discovery time of: 1 is: 1, finish time: 9
discovery time of: 2 is: 3, finish time: 7
discovery time of: 3 is: 9, finish time: 13
discovery time of: 4 is: 2, finish time: 8
discovery time of: 5 is: 4, finish time: 6
discovery time of: 6 is: 10, finish time: 12
12


Create a new paste based on this one


Comments: