Sei sulla pagina 1di 4

Muhammad Haris

Roll# 173187

Assignment Discrete Structure

Program to see the given circuit is Euler circuit or not:


1. #include<iostream>
2. #include<conio.h>
3. #include<list>
4. using namespace std;
5.
6. class Graph
7. {
8. int V;
9. list<int> *adj;
10. public:
11. Graph(int V)
12. {
13. this->V = V;
14. adj = new list<int>[V];
15. }
16. void addEdge(int v, int w);
17.
18. int isEulerian();
19.
20. bool isConnected();
21.
22. void DFSUtil(int v, bool visited[]);
23. };
24.
25. void Graph::addEdge(int v, int w)
26. {
27. adj[v].push_back(w);
28. adj[w].push_back(v);
29. }
30.
31. void Graph::DFSUtil(int v, bool visited[])
32. {
33. visited[v] = true;
34.
35. list<int>::iterator i;
36. for (i = adj[v].begin(); i != adj[v].end(); ++i)
37. {
38. if (!visited[*i])
39. {
40. DFSUtil(*i, visited);
41. }
42. }
43. }
44. bool Graph::isConnected()
45. {
46. bool visited[V];
47. int i;
48. for (i = 0; i < V; i++)
49. {
50. visited[i] = false;
51. }
52. for (i = 0; i < V; i++)
53. {
54. if (adj[i].size() != 0)
55. {
56. break;
57. }
58. }
59. if (i == V)
60. {
61. return true;
62. }
63. DFSUtil(i, visited);
64. for (i = 0; i < V; i++)
65. {
66. if (visited[i] == false && adj[i].size() > 0)
67. {
68. return false;
69. }
70. }
71. return true;
72. }
73. int Graph::isEulerian()
74. {
75. if (isConnected() == false)
76. {
77. return 0;
78. }
79. int odd = 0;
80. for (int i = 0; i < V; i++)
81. {
82. if (adj[i].size() & 1)
83. {
84. odd++;
85. }
86. }
87. if (odd > 2)
88. {
89. return 0;
90. }
91. return (odd)? 1 : 2;
92. }
93. void test(Graph &g)
94. {
95. int res = g.isEulerian();
96. if (res == 0)
97. {
98. cout << "Graph is not Eulerian\n";
99. }
100. else if (res == 1)
101. {
102. cout << "Graph has a Euler path\n";
103. }
104. else
105. {
106. cout << "Graph has a Euler cycle\n";
107. }
108. }
109. int main()
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. Graph g4(3);
138. g4.addEdge(0, 1);
139. g4.addEdge(1, 2);
140. g4.addEdge(2, 0);
141. test(g4);
142.
143. Graph g5(3);
144. test(g5);
145. Graph g5(3);
146. test(g5);
147. getch();
148. }

Potrebbero piacerti anche