Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2012, 15:20   #1
AlexCODER23
Пользователь
 
Аватар для AlexCODER23
 
Регистрация: 27.12.2010
Сообщений: 17
Печаль JavaScript. DFS. Поиск мостов.

Добрый день.

Готовые решения и алгоритмы разбросаны по всей сети, я в курсе.
Да, я читал книги.
Да, я пробовал переводить из C++/Pascal в JavaScript.
Да, я пробовал писать сам по алгоритму с e-maxx.ru.
Нет, ни одна попытка не увенчалась успехом.

Пишу здесь, т.к. подобного еще не находил (кажется, еще никто не отписался, как реализовать на JavaScript)


P.S. Ошибка найдена, решение приведено внизу.

Последний раз редактировалось AlexCODER23; 06.07.2012 в 08:56.
AlexCODER23 вне форума Ответить с цитированием
Старый 05.07.2012, 15:21   #2
AlexCODER23
Пользователь
 
Аватар для AlexCODER23
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

Кажется, я нашел ответ!

Последний раз редактировалось AlexCODER23; 06.07.2012 в 08:54.
AlexCODER23 вне форума Ответить с цитированием
Старый 06.07.2012, 08:53   #3
AlexCODER23
Пользователь
 
Аватар для AlexCODER23
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

После основательного изучения алгоритма поиска в глубину, задача была снова решена!

Выкладываю, вдруг кому-то поможет.

Тему можно закрывать, спасибо.

Код:
var pre = new Array();
var low = new Array();
var p = new Array();
var pre_c;

 function dfs(v) {
  pre[v] = pre_c;
  low[v] = pre_c;
  pre_c++;
  for(var i=0; i<size;i++)
  {
    if (graph[v][i]!=0)
    {
      
      if(pre[i]==0)
      {
	p[i] = v;
	dfs(i);
	low[v] = min(low[v],low[i]);	
	if (low[i]>pre[v])
	{
	  mark_bridge(v,i);
	}
      }
	else
	{
	  if (p[v]!=i)
	  {
	    low[v] = min(low[v],pre[i]);	    
	  }
	
      }
    }
  }
}


function start_search(){
  pre_c=1;
  pre = new Array();
  low = new Array();
  p = new Array();
  for(var i=0;i<size;i++)
  {
    pre[i]=low[i]=p[i]=0;
  }
  for(var i=0;i<size;i++){
    if (pre[i] == 0)
    {      
      dfs(i);
    }
  }
}
AlexCODER23 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрев мостов материнской платы Gigabyte GA-MA74GM-S2 blazonic Компьютерное железо 4 11.07.2011 15:49
JavaScript поиск правильных ответов ArcaN0id Помощь студентам 1 24.03.2011 21:50
DFS. Пaвeл Помощь студентам 2 25.04.2009 09:19
DFS. Пaвeл Помощь студентам 1 19.04.2009 15:59