Поиск в глубину

[ cpp ]

02 Jul 2012

#include "depth.h"
#include <iostream>
void fdepth(apex *graf,int m, int v) {
	apex *temp=new apex;
	int kv=0;
	tknot* tasks;
	new_null(tasks);
	int* seen_apex=new int [m];
	bool* ifseen_apex=new bool [m];
	temp->n=v-1;
	temp->next=graf[temp->n].next;
	add_compon(tasks, *temp);
	for(int i=0; i<m; i++) ifseen_apex[i]=true;
	seen_apex[kv++]=temp->n;
	apex *t;
	while (!check_empty(tasks)) {
		read_compon(tasks, *temp);
		t=temp->next;
		ifseen_apex[temp->n]=false;
		bool fl=ifseen_apex[temp->next->n]==false;
		if(fl) {
			del_compon(tasks);
			while(t &&(!ifseen_apex[t->n])) t=t->next;
			if (t) {
				temp->next=t;
				add_compon(tasks, *temp);
			}
			else if (!fl) del_compon(tasks);
		} else {
			temp->n=t->n;
			temp->next=graf[temp->n].next;
			add_compon(tasks, *temp);
			if (ifseen_apex[temp->n])
				seen_apex[kv++]=temp->n;
		}
	}
	for(int i=0; i<kv; i++) { cout<<seen_apex[i]+1<<", ";}
	cout<<endl;
	delete [] seen_apex;
	delete [] ifseen_apex;
}