Я написал простой алгоритм поиска нечетных циклов в графе. У меня есть посещенный вектор, который говорит мне, что если вектор был посещен, он инициализируется 0. 0. 1001 *
#include <iostream>
#include <vector>
#include <set>
#define UNVISITED 0
#define VISITED 1
using namespace std;
int vertices, edges;
vector<vector<int>> graph;
vector<int> visited;
vector<int> times;
int time_ = 1;
int hasOddCycle = false;
void dfs(int vertex) {
if (visited.at(vertex) == VISITED)
return;
visited.at(vertex) = VISITED;
times.at(vertex) = time_;
time_++;
for (auto elem: graph.at(vertex)) {
if (visited.at(elem) == VISITED) {
if (times.at(vertex) - times.at(elem) % 2 == 0)
hasOddCycle = true;
} else {
dfs(elem);
}
}
}
int main() {
cin >> vertices >> edges;
for (int i = 0; i <= vertices; i++) {
visited.emplace_back(UNVISITED);
graph.emplace_back(vector<int>());
times.push_back(0);
}
int from, to;
for (int i = 0; i < edges; i++) {
cin >> from >> to;
graph.at(from).push_back(to);
graph.at(to).push_back(from);
}
for (int i = 1; i <= vertices; i++) {
dfs(i);
if (hasOddCycle) {
cout << "NO" << endl;
return 0;
}
}
cout << "YES" << endl;
return 0;
}
Когда я запускаю свой код с заданными данными, вызывается dfs (1) и устанавливает посещаемость от 1 до 0. Первый элемент в цикле dfs равен 2, поэтому я проверяю, была ли посещена вершина 2, и это дает мне истину безо всякой причины! !! Я понятия не имею, почему это ...
Входные данные (вершины, количество ребер и число вершин):
5 6
1 2
2 3
3 4
4 1
1 5
5 3