Блог пользователя ruslan.rakhimov

Автор ruslan.rakhimov, 10 лет назад, перевод, По-русски

Если хотите использовать Notepad для C++ и не знаете как:
1. Установите Notepad++ :)
2. Установите NppExec plugin Notepad->Plugins->Plugin manager
3. Установите MinGw. Не забудьте добавить переменную PATH.

4. Перегрузите компьтер (иначе могут возникнуть ошибки)
5. Нажмите F6, чтобы открыть the execute window
6. Напишите следующие команды. Нажмите Save. Напишите название скрипта. Например: Compile C++ File

7. Зайдите в Plugins->NppExec->Adavanced Options->Menu Item
8. В the compbox выберите созданый скрипт и нажмите Add->OK
9. Зайдите в Settings->Shortcut mappter->Plugins->поищите название своего скрипта
10. Выберите горячую клавишу для его использования (For example: F9), click ok

Полный текст и комментарии »

  • Проголосовать: нравится
  • +41
  • Проголосовать: не нравится

Автор ruslan.rakhimov, 10 лет назад, По-русски

При изучении алгоритма на e-maxx Проверка графа на ацикличность и нахождение цикла понял, что алгоритм прекращает работу при нахождении первого цикла. Как найти все циклы в графе? Я переделал исходный алгоритм. При реализации моего алгоритма, некоторые циклы упускаются из вида. Например:

Ребра в неориент. графе: 1 2 1 3 2 3 2 4 3 4 Циклы: 1 2 3 1 2 3 4 2 1 2 4 3 1

Мой алгоритм find_cycles() не находит третий цикл. Как можно это исправить?

int ncycle = 0;
vector<int> cycle[MAXN];
vector<int> g[MAXN];

int add_cycle(int cycle_end, int cycle_st)
{
	cycle[ncycle].clear();
	cycle[ncycle].push_back(cycle_st);
	for(int v = cycle_end; v != cycle_st; v = p[v])
		cycle[ncycle].push_back(v);
	cycle[ncycle].push_back(cycle_st);
	
	reverse(cycle[ncycle].begin(), cycle[ncycle].end());
	
	return cycle[ncycle].size();		
}
void dfs(int v)
{
	color[v] = 1;
	for(int i = 0; i < g[v].size(); i++)
	{
		int to = g[v][i];
		if(color[to] == 0)
		{
			p[to] = v;
			dfs(to);
		}
		else if(color[to] == 1)
		{
			CycleFound = true;
			if(add_cycle(v, to) > 3) // Исключение вырожденных случаев, н: 1 2 1
				ncycle++;
		}
	}
	color[v] = 0; // Исправлено. Было: color[v] = 2;
}
void find_cycles()
{
	for(int i = 0; i < n; i++)
		if(color[i] == 0)
			dfs(i);
}

Полный текст и комментарии »

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

Автор ruslan.rakhimov, 11 лет назад, По-русски

Есть задача Плагин.

Я решил двумя способами. Я считаю что производительность обоих решений одинаковая. Но при этом первое решение проходит, а второе слетает на превышении времени. Первое решение. Второе решение.

Можете, пожалуйста, объяснить, почему так происходит?

Полный текст и комментарии »

  • Проголосовать: нравится
  • -8
  • Проголосовать: не нравится

Автор ruslan.rakhimov, 11 лет назад, По-русски

Можете пожалуйста объяснить, что это за задачи такие на конструктив? Если по теории чисел, комбинаторике, жадным алгоритмам Google еще может помочь, то по теме конструктивные алгоритмы он ничего дельного не дает.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится