Ho cambiato il programma vedendo sia da ciò che mi hai mandato sia da altre richieste sullo stesso problema (soprattutto questo Aiuto Appetito aracnide (tecla) - n°13 da Alex0 ), però continua a darmi 3 errori (su casi diversi ora) dicendo che i nodi non esistano, continuo a non capirne il motivo essendo che gli unici valori che il mio vettore soluzione prende sono da adj e da valori già presenti nel vettore. Hai qualche idea di cosa possa causarmi questo problema?
#include <bits/stdc++.h>
#define MAXN 31
using namespace std;
vector<int> adj[MAXN];
int check=0;
int N,M;
int r;
int vis[MAXN];
int sol[200000];
void DFS(int s,int n){
if(check==1) return;
r=n;
sol[n]=s;
if(sol[n-2]==sol[n] && n>=2){
if(adj[sol[n-1]].size()!=1) return;
}
if(vis[s]!=0){ //controlla se il nodo è gia stato visitato
if((n-vis[s]+1)%2==0){ //in caso lo sia controlla se c'è un numero
//pari di nodi su cui si è passati tra i due nodi in questione, se c'è
check=1; //imposta check =1 per uscire dalle funzioni
int u=n+1; //u e c scriveranno copieranno tutti i nodi già visitati
// da indice n fino a 0 del vettore sol
int c=vis[s]-1;
for(;c>=0;u++,c--){
sol[u]=sol[c];
r++; //r tiene conto di quante celle è composto sol
}
return;
}
}
vis[s]=n;
for(int i=0;i<adj[s].size();i++){
if(adj[s][i]!=0) DFS(adj[s][i],n+1);
}
}
int main(void)
{ //la parte del main non l'ho modificata
FILE *fr, *fw;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
int i,a,b;
assert(2 == fscanf(fr, "%d%d", &N, &M));
for(i=0;i<M;i++){
assert(2 == fscanf(fr, "%d%d", &a, &b));
adj[a].push_back(b);
adj[b].push_back(a);
}
sol[0]=0;
for(i=0;i<adj[0].size() && check==0;i++){
DFS(adj[0][i],1);
}
fprintf(fw, "%d\n", r);
for(i=0;i<=r;i++){
fprintf(fw, "%d ", sol[i]);
}
return 0;
}