#include<iostream>
#include <ctime>
#include <list>
#include <stack>
#include <queue>
#include <time.h>
#include <fstream>
#include <stdlib.h>
#include <unordered_set>
#include <string.h>
#include <vector>
using namespace std;
const size_t n = 20;
int counter = 0;
int lp = 0;
int E = 0.3*(n*(n - 1))/2;
bool tp[n];
vector<int> result;
int was[n][n];
void path(unordered_set<size_t> P[],int v){
while(!P[v].empty()){
auto v1 = P[v].begin();
P[v].erase(*v1);
P[*v1].erase(v);
if(was[v][*v1] == 0){
was[v][*v1] = 1;
was[*v1][v] = 1;
path(P, *v1);
result.push_back(v);
}
}
}
void generate(unordered_set<size_t> L[]){
int x,y;
list<int> odd;
for(int i = 0; i < n; i++){
tp[i] = 1;
}
if(E < n-1) E = n-1;
for(int i = 1; i < E; i++){
if(i < n){
x = rand() %i;
y = i;
}
else{
x = rand() %n;
y = rand() %(n-1);
y += (y >= x);
}
L[x].insert(y);
L[y].insert(x);
counter++;
}
for(int i = 0; i < n; i++){
if(L[i].size() %2){
odd.push_back(i);
tp[i]=0;
lp++;
}
}
while(!odd.empty()){
x = odd.front();
odd.pop_front();
y = odd.front();
odd.pop_front();
unordered_set<size_t>::const_iterator got = L[x].find (y);
if(got==L[x].end()){
L[x].insert(y);
L[y].insert(x);
counter++;
}
else{
L[x].erase(y);
L[y].erase(x);
counter--;
}
}
for(int i = 0; i < n; i++){
if(L[i].size() %2 == 0){
tp[i] = 1;
}
}
}
void print(unordered_set<size_t> L[]){
for (int i = 0; i < n; i++){
cout << i << ". ";
for (auto it = L[i].begin(); it != L[i].end(); it++)
cout << ' ' << *it;
cout << "\n";
cout << "parzysty: " << tp[i] << "\n";
}
cout << "odchylenie: " << lp << "\n";
}
void resultato(){
for(int i = 0 ; i < counter; i++){
cout << result.back() << " ";
result.pop_back();
}
}
int main(){
unordered_set<size_t> L[n];
unordered_set<size_t> pom[n];
cout << "dla: " << n << "\n";
generate(L);
for(int i = 0; i < n; i++){
pom[i] = L[i];
}
print(L);
print(pom);
for(int i=0; i<n; i++){
path(pom,i);
cout << "0" << "n. \n";
resultato();
print(pom);
resultato();
for(int j = 0; j < n; j++){
pom[j] = L[j];
}
}
return 0;
}
Ktoś może wie, dlaczego się program krzaczy i daje niepoprawny wynik?