Pagini recente » Cod sursa (job #407720) | Cod sursa (job #2481090) | Cod sursa (job #2099284) | Cod sursa (job #838966) | Cod sursa (job #2907321)
#include <fstream>
#include <string>
#include <vector>
#include <stack>
using std::string;
using std::vector;
using std::stack;
class Euler {
private:
string input_file;
string output_file;
int n;
bool* viz;
vector<std::pair<int, int>>* graf;
vector<int> result;
void read() {
std::ifstream in(input_file);
int m, x, y;
in >> n >> m;
graf = new vector<std::pair<int, int>>[n + 1];
for (int i = 1; i <= m; ++i) {
in >> x >> y;
graf[x].push_back(std::make_pair(y, i));
graf[y].push_back(std::make_pair(x, i));
}
viz = new bool[n + 1];
for (int i = 1; i <= m; ++i) {
viz[i] = false;
}
in.close();
}
void solve() {
stack<int> s;
s.push(1);
while (!s.empty()) {
int top = s.top();
if (!graf[top].empty()) {
auto back = graf[top].back();
graf[top].pop_back();
if (!viz[back.second]) {
viz[back.second] = true;
s.push(back.first);
}
}
else {
s.pop();
result.push_back(top);
}
}
}
public:
Euler(const string& input_file, const string& output_file) : input_file{ input_file }, output_file{ output_file }{
read();
solve();
};
void print() {
std::ofstream out(output_file);
for (const auto& nod : result) {
out << nod << " ";
}
out.close();
}
};
int main(int argc, char** argv) {
Euler e{ "ciclueuler.in", "ciclueuler.out" };
e.print();
return 0;
}