1+ #include < iostream>
2+ #include < vector>
3+ #include < algorithm>
4+
5+ enum class city : int
6+ {
7+ MOSCOW,
8+ LONDON,
9+ ISTANBUL,
10+ SEATTLE,
11+ DUBAI,
12+ MUMBAI,
13+ SINGAPORE
14+ };
15+
16+ std::ostream& operator <<(std::ostream& os, const city c)
17+ {
18+ switch (c)
19+ {
20+ case city::MOSCOW:
21+ os << " MOSCOW" ;
22+ return os;
23+ case city::LONDON:
24+ os << " LONDON" ;
25+ return os;
26+ case city::ISTANBUL:
27+ os << " ISTANBUL" ;
28+ return os;
29+ case city::SEATTLE:
30+ os << " SEATTLE" ;
31+ return os;
32+ case city::DUBAI:
33+ os << " DUBAI" ;
34+ return os;
35+ case city::MUMBAI:
36+ os << " MUMBAI" ;
37+ return os;
38+ case city::SINGAPORE:
39+ os << " SINGAPORE" ;
40+ return os;
41+ default :
42+ return os;
43+ }
44+ }
45+
46+ struct graph
47+ {
48+ std::vector<std::vector<std::pair<int , int >>> data;
49+
50+ graph (int n)
51+ {
52+ data = std::vector (n, std::vector<std::pair<int , int >>());
53+ }
54+
55+ void addEdge (const city c1, const city c2, int dis)
56+ {
57+ std::cout << " ADD: " << c1 << " -" << c2 << " =" << dis << std::endl;
58+
59+ auto n1 = static_cast <int >(c1);
60+ auto n2 = static_cast <int >(c2);
61+ data[n1].push_back ({n2, dis});
62+ data[n2].push_back ({n1, dis});
63+ }
64+
65+ void removeEdge (const city c1, const city c2)
66+ {
67+ std::cout << " REMOVE: " << c1 << " -" << c2 << std::endl;
68+
69+ auto n1 = static_cast <int >(c1);
70+ auto n2 = static_cast <int >(c2);
71+ std::remove_if (data[n1].begin (), data[n1].end (), [n2](const auto & pair)
72+ {
73+ return pair.first == n2;
74+ });
75+ std::remove_if (data[n2].begin (), data[n2].end (), [n1](const auto & pair)
76+ {
77+ return pair.first == n1;
78+ });
79+ }
80+ };
81+
82+ int main ()
83+ {
84+ graph g (7 );
85+ g.addEdge (city::LONDON, city::MOSCOW, 900 );
86+ g.addEdge (city::LONDON, city::ISTANBUL, 500 );
87+ g.addEdge (city::LONDON, city::DUBAI, 1000 );
88+ g.addEdge (city::ISTANBUL, city::MOSCOW, 1000 );
89+ g.addEdge (city::ISTANBUL, city::DUBAI, 500 );
90+ g.addEdge (city::DUBAI, city::MUMBAI, 200 );
91+ g.addEdge (city::ISTANBUL, city::SEATTLE, 1500 );
92+ g.addEdge (city::DUBAI, city::SINGAPORE, 500 );
93+ g.addEdge (city::MOSCOW, city::SEATTLE, 1000 );
94+ g.addEdge (city::MUMBAI, city::SINGAPORE, 300 );
95+ g.addEdge (city::SEATTLE, city::SINGAPORE, 700 );
96+
97+ g.addEdge (city::SEATTLE, city::LONDON, 1800 );
98+ g.removeEdge (city::SEATTLE, city::LONDON);
99+
100+ return 0 ;
101+ }
0 commit comments