Hej mam problem dotyczący DFS.
kod:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void odwiedzWezel(int u,vector < int > v[], bool* odwiedzony, int* poprzednik){
odwiedzony[u] = true;
for(int i=0;i<v[u].size();i++){
if(!odwiedzony[v[u][i]]){
cout<<v[u][i]<<endl;
poprzednik[i] = v[u][i];
odwiedzWezel(v[u][i],v,odwiedzony,poprzednik);
}
}
}
void dfs(int n,int start,vector < int > v[]){
bool* odwiedzony = new bool [n];
int* poprzednik = new int [n];
for(int i=0;i<n;i++){
odwiedzony[i] = false;
poprzednik[i] = -1;
}
for(int i=0;i<v[start].size();i++){
if(!odwiedzony[v[start][i]])
odwiedzWezel(i,v,odwiedzony,poprzednik);
}
}
int main()
{
int n;
cin>>n;
vector < int > sasiedzi[n+1];
for(int i=0;i<n-1;i++){
int x,y;
cin>>x>>y;
sasiedzi[x].push_back(y);
sasiedzi[y].push_back(x);
}
for(int i=1;i<=n;i++){
dfs(n,i,sasiedzi);
cout<<endl;
}
return 0;
}
Jeżeli podam następujące dane:
8
3 1
4 1
1 2
6 1
6 7
6 8
1 5
Gdy dfs zaczyna się od 1 jest wszystko dobrze. Odwiedza wszystkie wierzchołki poprawnie ale dla reszty liczb nie wypisuje wierzchołków albo wypisuje takie same jak dla 1. Zależy mi na tym aby po skończonym dfs przyjmował on inny punkt startu ponieważ chcę przerobić ten kod i szukać w nim najdłuższej ścieżki. Proszę o pomoc w odnalezieniu błędu w kodzie . Z góry dziękuję za odpowiedz