File tree 1 file changed +150
-0
lines changed
1 file changed +150
-0
lines changed Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+ #include < list>
3
+ using namespace std ;
4
+
5
+
6
+ class Graph
7
+ {
8
+ int V;
9
+ list<int > *adj;
10
+ public:
11
+ // Constructor and destructor
12
+ Graph (int V) {this ->V = V; adj = new list<int >[V]; }
13
+ ~Graph () { delete [] adj; }
14
+
15
+
16
+ void addEdge (int v, int w);
17
+
18
+
19
+ int isEulerian ();
20
+
21
+
22
+ bool isConnected ();
23
+
24
+
25
+ void DFSUtil (int v, bool visited[]);
26
+ };
27
+
28
+ void Graph::addEdge (int v, int w)
29
+ {
30
+ adj[v].push_back (w);
31
+ adj[w].push_back (v);
32
+ }
33
+
34
+ void Graph::DFSUtil (int v, bool visited[])
35
+ {
36
+
37
+ visited[v] = true ;
38
+
39
+
40
+ list<int >::iterator i;
41
+ for (i = adj[v].begin (); i != adj[v].end (); ++i)
42
+ if (!visited[*i])
43
+ DFSUtil (*i, visited);
44
+ }
45
+
46
+
47
+ bool Graph::isConnected ()
48
+ {
49
+
50
+ bool visited[V];
51
+ int i;
52
+ for (i = 0 ; i < V; i++)
53
+ visited[i] = false ;
54
+
55
+
56
+ for (i = 0 ; i < V; i++)
57
+ if (adj[i].size () != 0 )
58
+ break ;
59
+
60
+
61
+ if (i == V)
62
+ return true ;
63
+
64
+
65
+ DFSUtil (i, visited);
66
+
67
+
68
+ for (i = 0 ; i < V; i++)
69
+ if (visited[i] == false && adj[i].size () > 0 )
70
+ return false ;
71
+
72
+ return true ;
73
+ }
74
+
75
+
76
+ int Graph::isEulerian ()
77
+ {
78
+
79
+ if (isConnected () == false )
80
+ return 0 ;
81
+
82
+
83
+ int odd = 0 ;
84
+ for (int i = 0 ; i < V; i++)
85
+ if (adj[i].size () & 1 )
86
+ odd++;
87
+
88
+
89
+ if (odd > 2 )
90
+ return 0 ;
91
+
92
+ return (odd)? 1 : 2 ;
93
+ }
94
+
95
+
96
+ void test (Graph &g)
97
+ {
98
+ int res = g.isEulerian ();
99
+ if (res == 0 )
100
+ cout << " graph is not Eulerian\n " ;
101
+ else if (res == 1 )
102
+ cout << " graph has a Euler path\n " ;
103
+ else
104
+ cout << " graph has a Euler cycle\n " ;
105
+ }
106
+
107
+
108
+ int main ()
109
+ {
110
+
111
+ Graph g1 (5 );
112
+ g1.addEdge (1 , 0 );
113
+ g1.addEdge (0 , 2 );
114
+ g1.addEdge (2 , 1 );
115
+ g1.addEdge (0 , 3 );
116
+ g1.addEdge (3 , 4 );
117
+ test (g1);
118
+
119
+ Graph g2 (5 );
120
+ g2.addEdge (1 , 0 );
121
+ g2.addEdge (0 , 2 );
122
+ g2.addEdge (2 , 1 );
123
+ g2.addEdge (0 , 3 );
124
+ g2.addEdge (3 , 4 );
125
+ g2.addEdge (4 , 0 );
126
+ test (g2);
127
+
128
+ Graph g3 (5 );
129
+ g3.addEdge (1 , 0 );
130
+ g3.addEdge (0 , 2 );
131
+ g3.addEdge (2 , 1 );
132
+ g3.addEdge (0 , 3 );
133
+ g3.addEdge (3 , 4 );
134
+ g3.addEdge (1 , 3 );
135
+ test (g3);
136
+
137
+
138
+ Graph g4 (3 );
139
+ g4.addEdge (0 , 1 );
140
+ g4.addEdge (1 , 2 );
141
+ g4.addEdge (2 , 0 );
142
+ test (g4);
143
+
144
+
145
+ Graph g5 (3 );
146
+ test (g5);
147
+
148
+ return 0 ;
149
+ }
150
+
You can’t perform that action at this time.
0 commit comments