[Moscow.pm] Взрыв мозга или занимательная топология

Ivan B. Serezhkin ivan на serezhkin.com
Сб Ноя 24 07:00:14 PST 2007


Ivan B. Serezhkin wrote:
> Kaltashkin Eugene wrote:
> 
>> легко. http://zhecka.323f.net.ru/temp/pack.tar.gz
> 
> А можно человеческое объяснение формата ?
> Я правильно понял, что имя файла - это свич, а всё что в ковывчечках - 
> это мак устройства на порту?
> а всё что без кавычечков  мусор ?
> 
> А ещё лучше хотим датадампер хэша
> {
> 	свич =>{
> 		порт=>мак,
> 		порт=>мак
> 		},
> 	свич =>{
> ....
> }
> 
> И это, а как из этих данных понять, что свич воткнут в свич ?
> 
> 


Вообщем попробую объяснить как я решаю такие задачи:
Поиск в ширину,
my @queue=qw(list of neighbors);
while (@queue) {
     my $element=shift @queue;
     last if $element->distance > $deepnes;
     push @queue, map {$_->distance($element->distance()+1);$_} grep {! 
$_->marked()} $element->neighbors();
     $element->mark();
}
Эта штука позволяет потрогать все близкие точки на глубину $deepnes
и расставит им расстояние от начального.
Но не позволяет найти путь.

Путь ищется  перебором в глубину,
my @queue=($begin_of_path);
my @path=();
my $element;
while (@queue) {
     my $element=pop @queue;
     push @path, $element;
     last if $element==$end_of_path;
     if ($element->neighbors() -1) {
	shift  @queue, $element->neighbors();
     } else {
	$element->mark_deleted;
     }
}
print "Path: " . join(' - ', grep {!$_->deleted} @path);
Соответственно neighbors ищется без учёта deleted
Таким образом, узел у которого отрезали все тупики сам становится тупиком




-- 
Ivan B. Serezhkin


Подробная информация о списке рассылки Moscow-pm