Skip to content

Commit 7da67a3

Browse files
committed
dfs implemented successfully :D by myself
1 parent e16fecb commit 7da67a3

File tree

1 file changed

+129
-0
lines changed

1 file changed

+129
-0
lines changed

Graph.cpp

+129
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
//
2+
// Created by ahmad on 12/27/16.
3+
//
4+
5+
#include <algorithm>
6+
#include <stack>
7+
#include "Graph.h"
8+
9+
GraphEdgeConnection::GraphEdgeConnection(char v1, char v2)
10+
{
11+
vertex1.key = v1;
12+
vertex2.key = v2;
13+
}
14+
15+
bool GraphEdgeConnection::contatinVertex(char v)
16+
{
17+
return (v == vertex1.key) || (v == vertex2.key);
18+
}
19+
20+
GraphVertex::GraphVertex()
21+
{
22+
isVisited = false;
23+
}
24+
25+
bool Graph::containVertex(char v)
26+
{
27+
for (int i = 0; i < vertexes.size(); ++i) {
28+
if(vertexes[i].key == v)
29+
return true;
30+
}
31+
32+
return false;
33+
}
34+
35+
bool Graph::isVisited(char v)
36+
{
37+
for (int i = 0; i < vertexes.size(); ++i) {
38+
if(vertexes[i].key == v)
39+
return vertexes[i].isVisited;
40+
}
41+
42+
exit(-1);
43+
}
44+
std::vector<char> Graph::getAllNotVisitedVertexesConnectedTo(char v)
45+
{
46+
std::vector<char> result;
47+
for (int i = 0; i < edgeTable.size(); ++i) {
48+
if(edgeTable[i].contatinVertex(v))
49+
{
50+
char c = (edgeTable[i].vertex1.key == v)? edgeTable[i].vertex2.key : edgeTable[i].vertex1.key;
51+
if(!isVisited(c))
52+
result.push_back(c);
53+
}
54+
}
55+
56+
std::sort(result.begin(), result.end());
57+
58+
return result;
59+
}
60+
61+
void Graph::addEdge(char v1, char v2)
62+
{
63+
if( !containVertex(v1))
64+
{
65+
GraphVertex g1;
66+
g1.key = v1;
67+
vertexes.push_back(g1);
68+
}
69+
70+
if( !containVertex(v2))
71+
{
72+
GraphVertex g2;
73+
g2.key = v2;
74+
vertexes.push_back(g2);
75+
}
76+
77+
edgeTable.push_back(GraphEdgeConnection(v1, v2));
78+
}
79+
80+
void Graph::visitVertex(char v)
81+
{
82+
for (int i = 0; i < vertexes.size(); ++i) {
83+
if(vertexes[i].key == v)
84+
{
85+
vertexes[i].isVisited = true;
86+
return;
87+
}
88+
}
89+
}
90+
91+
std::vector<char> Graph::dfs(char startVertex)
92+
{
93+
std::vector<char> result;
94+
95+
char currentVertex = startVertex;
96+
std::stack<char> stck;
97+
stck.push(currentVertex);
98+
result.push_back(currentVertex);
99+
100+
while (! stck.empty())
101+
{
102+
currentVertex = stck.top();
103+
visitVertex(currentVertex);
104+
std::vector<char> nearestVertexes = getAllNotVisitedVertexesConnectedTo(currentVertex);
105+
if(nearestVertexes.size() == 0)
106+
{
107+
stck.pop();
108+
}
109+
else
110+
{
111+
currentVertex = nearestVertexes[0];
112+
stck.push(currentVertex);
113+
result.push_back(currentVertex);
114+
}
115+
}
116+
117+
118+
return result;
119+
}
120+
121+
std::vector<char> Graph::bfs(char startVertex)
122+
{
123+
std::vector<char> result;
124+
125+
126+
127+
return result;
128+
}
129+

0 commit comments

Comments
 (0)