Sprawdzania czy graf jest drzewem. DFS, problem ;d

0

Witam. Pisze znowu temat poniewaz mam problem z zadaniem dotyczacym czy graf jest drzewem . Zastosowalem metode dfs nierekurencyjna. Ogolnie wywala mi blad "wrong answear" dla 4 testow na 14. Macie moze jakies wskazowki czego tutaj zapomnialem uwzglednic ???
Oto kod:

#include <iostream>
#include <vector>
#include <stack>

using namespace std;


int main (){
	stack <int> sts;
	int n; // ilosc wierzcholkow
	int k; // ilosc krawedzi
	cin>>n;
	cin>>k;
	vector <vector <int> > vec(n+1);
	bool tab[n+1];
	for (int i=1; i<=n; i++){
		tab[i]=false;
	}
	int a, b;
	for (int i=1; i<=k; i++){
		cin>>a>>b;
		vec[a].push_back(b); 
	}	
	sts.push(1); // dodanie pierwszego wierzcholka do stacka.
	while (sts.size()>0){ //  petla wykonujaca przeszukiwanie grafu
		int x = sts.top();
		if (tab[x]==true){
			cout<<"NO";
			return 0;
		}		
		else{
			sts.pop();
			tab[x]=true;
			for (int i=0; i<vec[x].size(); i++){
				int helpone = vec[x][i];
				if (tab[helpone]==false){
					sts.push(helpone);
				}
				else {
					cout<<"NO";
					return 0;
				}
			}
		}	
	}
	for (int i=1; i<=n; i++){
		if(tab[i]==false){
			cout<<"NO";
			return 0;
		}	
	}
	cout<<"YES";
	return 0;
}

0

Dodam, ze dla danych wejsciowych wyswietla mi dobry wynik ;d

0

Ok, temat do zamkniecia. Problem polegal na dwukierunkowym przejsciu grafu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1