pavki/hr_qa_sbs_best_bad huggingface dataset:
Вопрос: Тест (benchmark) графических оболочек linux?

Лучший ответ: если не работает аппаратное ускорение(а оно не работает) ,то будут зависоны ,не зависимо от системы.
сам сижу на минт 19 мате
комп 10-ти летней давности AMD Athlon 64 X2 5200+  и карта ни о чём - radeon hd5450
youtube 720p в firefox - грузит проц 60-80%
1080p - 100%
то же самое видео ,открытое в vlc - кушает в два раза/три раза меньше
зы
зачем тебе 1080 ?
у тебя монитор метр на метр :) ?
720p на 25" мониторе = вполне приличное качество

Худший ответ: XFCE ставьте. Ток учтите, что дело не только в DE - важно еще правильно настроить все.
Вопрос: Какую панель использовать для облака?

Лучший ответ: Облако облаком делает не панелька, отнюдь

Худший ответ: VMmanager 6 посмотрите.
Или Proxmox/VMmanager 5, если для себя.
Вопрос: Что произойдет если начать использовать PoE с кабелем который не правильно обжат??

Лучший ответ: Если PoE по стандарту 802.3af/at то должен увидеть и не подать напряжение. Если Passive PoE - как повезёт

Худший ответ: А что такое "криво обжат"? PoE работает по последней коричневой паре... Если коричневая пара с одной из сторон  у вас не последняя... То работать не будет... 
Если с обеих сторон у вас не коричневая пара, то понятно - что такое "криво обжат", ориентируйтесь на последнюю пару... 
Ещё "кривым" иногда называют cross-over кабель, PoE в нем точно будет работать... 
А остальное - лотерея.
Вопрос: Хочу поставить убунту на эндлесс. Но не могу найти сайт с убунту и как его установить?

Лучший ответ: Ненужна вам Ubunta и любой другой дистрибутив Linux. Вам ещё сюда рано... Вы потом будете проклинать всё на свете, и плодить миллионы вопросов на Тостере. У Убунту и некоторых дистрибутивов хоть и есть визуальная оболочка, но 80% это работа из консоли(чёрное окошко куда нужно будет вводить команды). В игрушки на ней не поиграете, программы так же специфические и не устанавливаются простым скачиванием установщика из интернета.
Мой совет, освойте Windows. Потом лезьте в эти дебри мануалов.

Худший ответ: ubuntu.ru
Внезапно!
BIOS, простыми словами, это такая программка в компьютере, которую вы не сможете удалить, которая нужна для тончайшей настройки железа и правильной его работы.
Вопрос: Что делать если приходится собирать требования и программировать одновременно?

Лучший ответ: Найти другую работу

Худший ответ: Вы фактически выполняете ожновременно роль продакт овнера, продакт менеджера и веб-разработчика. Если у вас нет желания, перейти в какую-то компанию на роль PM (платят, кстати неплохо), то меняем работу, ибо это трата времен.
Вопрос: Как найти проект куда нужны программисты-энтузиасты?

Лучший ответ: Вам повезло - Где можно найти Сеньор БЭ разработчика в стартап?

Худший ответ: Гуглите open source
Вопрос: Заменил материнскую плату, нужно ли переустанавливать Шиндоус?

Лучший ответ: все про все.. но не конкретно..
- если есть куча установленного софта + лень переставлять + система запустилась = радуемся! (+ переустанавливаем все недостающие дрова
- если хочется что бы все идеально = делаем бекапы + форматируем диск + переустанавливаем систему + все дрова + весь софт + достаем из бекапов данные/настройки/файлы

выбирайте что вам более по душе

Худший ответ: драйввера для материнки поставьте и всё
Вопрос: Как научиться проектировать программы в ооп стиле?

Лучший ответ: Посмотрите в сторону предметно ориентированного проектирования (DDD).

- https://habr.com/ru/post/269589/
- https://habr.com/ru/post/269893/
- https://habr.com/ru/post/267125/

Хорошие книги по этой теме:
- Роберт Мартин "Чистый код Создание, анализ и рефакторинг"
- Роберт Мартин "Чистая архитектура"
- Стив Макконнелл "Совершенный код"

Если сможете найти исходники похожих на ваш проектов - изучите их,
посмотрите как там решались подобные задачи.

Еще очень хороший вариант - найти опытного разработчика и попросить его сделать review вашего кода, чтобы он объяснил вам как вот тут лучше сделать, а как там можно было сделать и почему именно так будет лучше.

Худший ответ: тебе не знания не хватает, а понимания и практики. самый простой вариант начать осваивать фреймворки, хорошо бы laminas/simphony, но для начала и phpixie/slimphp хватит.
Вопрос: Как лучше реализовать систему фильтрации?

Лучший ответ: В сторону товарищей майоров который читают всю переписку.
Потому что не знаю вариантов как можно запретить писать например вот так:санasолСОБАКАyaндекcTOCHKAru - всё в латиниц переведите, там и поговрим.
или такмой телеphone: se7en девять три раза 1 два 45 шисдисят семь
Тем более отследить это регулярками.

Худший ответ: Простые регулярки пользовать не хочется
почему? Это самый правильный способ с точки зрения ресурсов. Посоветуйте пакет
Мне нравятся из Ашана, очень прочныенаправьте в какую сторону мне двигаться
обратно в сторону регулярок )))
Сорри, если грубо. Это болезнь, не могу себя сдерживать
Вопрос: Простой векторный графический редактор?

Лучший ответ: Ну, если бы на все задачи можно было найти точные инструкции, было бы скучно. 
Пробуйте написать начиная с малого, например:
1) Создайте холст, просто объект, который будет помещать в себя фигуры. Это будет некий viewport. 
2) Сделайте скролл этого холста мышкой, во все стороны.
3) Сделайте возможность динамически добавлять объекты на холст, сначала определите базовый объект, например прямоугольник или линию. Легче на этом моменте сразу определить интерфейс IShape, таким образом дальше будет легче унифицировать все объекты при добавлении их на холст, да и холст ничего не должен знать об этих объектах, только об интерфейсе.
4) Сделайте drag&drop добавленных объектов, чтобы их можно было тащить. 
5) Добавьте зум, это не простой шаг, тут нужно многое учитывать, особенно часто на этой задаче ломается позиционирование drag&drop объектов.
6) Сделайте трансформатор объектов, который будет изменять их размер (для прямоугольников и.т.д.), менять точки (для линий), вращать и.т.д.
7) Сделайте редактор свойств, через который будете назначать атрибуты вашим объектам, такие как цвет заливки, цвет рамки, ширина рамки, непрозрачность и.т.д. 
8) Добавляйте потихоньку различные объекты. Можете подглядывать в другие редакторы, например inkscape.
9) Реализуйте сохранение и загрузку холста. Тут лучше не изобретать свой формат данных, а использовать открытый, например svg. 
10) Буфер обмена. Тут либо свой формат в бинарник, либо тот же самый svg в текстовом виде (что куда лучше, так сделано в фигме).
11) Отменить/вернуть - важная штука, и на первый взгляд простая. Но простая она только в том случае, если запоминать шаги путем снимка всех текущих объектов, но этот способ плохой. По нормальному нужно при любой операции над объектами на холсте делать снимок изменений. Например подвинули кубик на 10px влево, и записали в память значение
{ id: 'id кубика', x: -10 }
и потом при нажатии отмена, будете просто делать обратную операцию, добавлять эти 10px. Тут у вас возникнут сложность с операцией "возврат", но думаю, если вы дошли до этого шага, упорство у вас уже есть. Пригодятся паттерны: command и memento
12) Ну, тут уже по мелочи, различные киллер фичи, новые объекты, свойства, различные меню и.т.д.

Худший ответ: Советую изучить .emf (enhanced metafile)
Вопрос: Какой монитор для программирования подойдет лучше?

Лучший ответ: FullHD для 27" маловато, по моему опыту. Глаза устают. Нужно 2к или 4к на такую диагональ.

Худший ответ: Если используемая вами ОС нормально поддерживает масштабирование (иными словами, если Win 10), то однозначно нужно брать 4k. Диагональ - от 24 до 32", насколько позволяют бюджет и пространство на столе.
Вопрос: Как вызвать функцию для всех элементов списка в Haskell?

Лучший ответ: Или так
λ> myfun = (^2)
λ> myfun <$> [1, 2, 3]
[1,4,9]

λ> myfun = (^2)
λ> map myfun [1, 2, 3]
[1,4,9]

Что больше подходит под определение

Есть функция:
pow2 x = x ^ 2

Есть такой список:
[1, 2, 3, 4, 5]
Как вызвать функцию для всех элементов списка

Хотя еще
squares :: Num a => [a] -> [a]
squares lst = do
    x <- lst
    return (x ^ 2)

squares' :: Num a => [a] -> [a]
squares' lst = lst >>= \x -> return (x ^ 2)

squares'' :: Num a => [a] -> [a]
squares'' lst = [x ^ 2 | x <- lst]

fx f lst = [f x | x <- lst]

main = do 
  print $ fx (^2)   [1, 2, 3]
  print $ squares   [1, 2, 3]
  print $ squares'  [1, 2, 3]
  print $ squares'' [1, 2, 3]

Худший ответ: Всё верно:
Prelude> myFun = map (^2)
Prelude> myFun [1, 2, 3, 4]
[1,4,9,16]
Вопрос: Как проверить сайт на адаптивность?

Лучший ответ: В инструментах разработчика в браузерах есть адаптивный режим. Можно выбрать по модели девайса, либо указать размер экрана руками.

Худший ответ: можете открыть в хром сайт, клавиша f12 , сверху справа заначек есть
Вопрос: Что делает это в bash?

Лучший ответ: google://bash dirname и т.д.

Худший ответ: -f file - True if file exists and is a regular file.
So yes, -f means file (./$NAME.tar in your case) exists and is a regular file (not a device file or a directory for example).
Если файл  "/etc/license существует и не представляет собой устройство либо папку 
Вывести надпись:  "The panel is already installed."
Вопрос: Как фиксировать показания водомеров и отправлять на емейл?

Лучший ответ: > Буду рад если наставите на путь правильный.
На реализацию проекта в железе и на доводку вы потратите значительное количество времени, как уже справедливо отметили выше.
Как вариант - можно использовать чисто программное решение. Поскольку вы живете один, - то каждый месяц набегает примерно одинаковое количество израсходованной воды. По истории можете глянуть да посчитать сколько у вас выходит в среднем, заодно прикинуть сезонность - сколько выходит в среднем летом, а сколько - зимой, раз у вас много свободного времени. 
Затем настроить периодическую отправку прогнозных показаний с поправкой на сезонность + инженерную погрешность, в определенные дни на емейл в управляющую компанию. 
Время от времени - раз в несколько месяцев просто проверять насколько прогнозные показания разбежались с реальными - и просто корректировать их в одну или другую сторону...

Худший ответ: Как раз сейчас делаю "для души" водосчетчик. Датчик либо по стандарту Namur или простой геркон. Вывод на ePaper и в облако через Wifi. Питание 2 АА батарейки.Welcome
Вопрос: Как автоматизировать подключение к VPN?

Лучший ответ: Видимо используете микрософтовские стандартные варианты ВПН?
У микрософта есть такая штука CMAK помогает созадавать установщики ВПН соединения.
Так же создать ВПН соединение можно с помощью powershell скрипта используя апплет Add-VpnConnection.Тут и тут пишут, что можно и просто в cmd (т.е. батником) создавать соединения.
Подключить ВПН соединение с помощью rasdial, запустить RDP - mstsc.
Если использовать openvpn, то можно уйти от паролей и сделать ВПН на ключах. Распространять уже преднастроенную сборку openvpn. Клиентские ключи можно регулярно банить и генерить новые. Новые выкладывать на сайте.
Логин/пароль на винду лучше не прописывать в скрипте а публиковать на сайте и так же регулярно менять - пусть пользователь вводит их ручками. На всякий случай - сохранить логин/пароль для RDP соединения можно с помощью утилиты cmdkey.

Худший ответ: Если доступ нужен только к rdp - не проще ли, и не лучше ли воспользоваться remote desktop gateway?
Вопрос: Как стилизовать checkbox:disabled?

Лучший ответ: На label нельзя, на span можно.

Худший ответ: label.checkbox input:disabled + span{
  color: #ccc;
}
илиlabel.checkbox input:disabled + span{
  opacity: .5;
}
Вопрос: Как сделать задержку в цикле for in в jQuery?

Лучший ответ: Так? Поменял ваш пример
Можно обернуть всю работу в асинхронную функцию, тогда вам будет доступна удобная работа с асинхронностью. // Где-то выше
const delay = (ms) => new Promise((resolve) => {
	setTimeout(resolve, ms);
});

// Это уже в асинхронной функции
/*
   Можно вызвать в любом месте в асинхронной функции, тогда код, условно, 
   остановится там на 1000 миллисекунд и продолжится, когда Promise из delay зарезолвится
*/
await delay(1000);
Вот именно ваш случай:const delay = (ms) => new Promise((resolve) => {
	setTimeout(resolve, ms);
});

(async () => {
  for (var key in contact) {
    var obj = contact[key];
    for (var prop in obj) {
      $('[name="'+prop+'"]').val(obj[prop]);
      console.log(key + " " + obj[prop]);
    }  			
    await delay(1000);
  }
})()

Худший ответ: Я бы сделал такvar keys = contact.keys(),
	i = 0;
function nextKey(){
	for (var prop in contact[keys[i]]) {
        $('[name="'+prop+'"]').val(obj[prop]);
        console.log(key + " " + obj[prop]);
    }
    if (++i < keys.length) setTimeout(nextKey, 60000);
}
nextkey();
Вопрос: Что должно быть входным параметром метода C#?

Лучший ответ: видимо там нужен диапазон из версии 8ranges

Худший ответ: Похоже что входные данные - разных типов. Последний скорее всего строковый.
Вопрос: В какую область ИТ можно перейти с опытом в классическом телекоме?

Лучший ответ: облачные сервисы, ML, data analitics.
Каким образом "тянуть провода" ростелеком как-то связуется с тем, что Вы описали выше?
По факту - если у Вас есть желание прыгать в IT, не важно где вы работали до этого. Как правило смотрят не на прошлое место работы(если это конечно не Google, и не целевая специальность), а на знания, и практические навыки. Если Ваши знания это - обжать провода, и уметь конфигурировать свитч(работник средней руки телекома), это никаким образом не сыграет Вам на руку в data analitics.
Вывод: изучите профессию, подтяните скилы, и вливайтесь в любую сферу которая Вам нравится.

Худший ответ: Если не хочешь ничего сильно менять - системный/сетевой администратор, если не лень немножко подучиться - подучись до DevOps, ну а если кардинально перемен захотелось - тут уж извини, берешь волю в кулак и учишься тому, что интересно. Я сам в схожей ситуации нахожусь, мне работа моя нихрена не нравится, но уйти в ближайшие несколько лет не смогу, поэтому я ищу свободное время и учусь - бекэнд, фронтэнд, докеры всякие, алгоритмы и структуры данных... Ну и еще - начни лучше с курсов по подготовке к собеседованиям, так поймешь, как вообще будет происходить процесс твоего перехода
Вопрос: Полезно ли долго (и вообще) «велосипедить» в программировании?

Лучший ответ: Когда советуют, убедитесь, что у вас и у аудитории этого совета одна цель. Потому что "как можно скорее начать пользоваться фреймворками" - это если задача - как можно скорее начать шлёпать продукт и деньги получать. А если задача - научиться программировать, фреймворки тут не при чем.

Худший ответ: Если способен написать, для примера, роутер для сайта, без гугления как такие вещи делаются, а взять, поставить себе задачу и решить ее, тогда, возможно, нужды велосипедить нет, разве что по фану. В противном случае надо как-то учиться всему, и набивать руку на велосипедах вполне себе нормально.
Вопрос: Всегда ли нужно использовать тип int?

Лучший ответ: Всё зависит от целей. В подавляющем большинстве случаев можно использовать int и не беспокоиться о перерасходе памяти.
Задумывается стоит если таких переменных миллиарды или ресурсы очень ограничены.
Я бы скорее задумывался о возможности переполнения, не всегда результат операции с переменными конкретного типа в него помещается. Это важнее, чем мистическая экономия.
И еще важно чтобы типы в выражении соответствовали друг другу и ожиданию программиста.

Худший ответ: Какой вам нужно в конкретной ситуации в конкретной программе на конкретной платформе - такой и используйте.
Может вам надо экономить память (под какой нить микроконтроллер пишете) - тогда byte или еще что. Или у вас где то инты жестко требуются - зачем тогда char...
Вопрос: Какой посоветуете алгоритм для поиска изменений в тексте?

Лучший ответ: Это называется rsync

Худший ответ: Алгоритм простой: "дерево" чанков (если это код) и "цепочка" чанков (если это НЕ код).
1. Формируете два унифицированных "дерева" зависимых частей кода у старого и нового файлов в виде чанков (блоков).
2. Забираете только изменившиеся "ветки" общего унифицированного "дерева".

Разумеется, всё это придётся реализоввывать с "нуля" своими силами.
Вопрос: Как обновить computed property в VUE при изменении элемента массива Array?

Лучший ответ: Оставлю здесь это для тех, кто ищет ответ на похожий вопрос.

В таких ситуациях, когда мы хотим "обновить" computed свойство при наступлении нереактивного события, иногда очень удобно в data задать переменную-счётчик. При наступлении такого события мы просто увеличиваем счётчик. 

В нашем целевом computed свойстве используем эту переменную как угодно, например так:

data() {
    return {
      changed: 0,
      myArray: []
    }
},
computed: {
    isArrayChanged() {
      let hook = this.changed;
      return (myArray)
    }
},
methods: {
    myArrayNewLenght(data) {
      myArray.length = data; //
      this.changed++;
    }
}

Несмотря на то, что такое изменение длины массива является нереактивным, мы изменили нашу реактивную переменную changed, которая используется в нашем computed свойстве, а значит свойство обновится.

Худший ответ: используйте Vue.set() или this.$set() при обновлении массива, который должен лежать либо в data либо в state, а не в computed
Вопрос: Какие существуют бесплатные антивирусы и брандмауэры для некоммерческих организаций?

Лучший ответ: Встроенные в Windows Защитник и Брандмауэр.

Худший ответ: Какие существуют бесплатные антивирусы и брандмауэры для некоммерческих организаций?
Отсутствие у организации прибыли в контексте лицензирования ПО ничего не меняет, для подавляющего числа разработчиков любая организация - это коммерческий пользователь. 
Так что ищите сразу по запросу "freeware для коммерческого использования", например на руборде неплохая одноименная подборка есть. spoilerВот что там про бесплатные антивирусы и файерволлы:
Comodo Internet Security 
FortiClient Endpoint Security Suite
Microsoft Security Essentials
Privatefirewall
Вопрос: Что влияет на this в этом случае?

Лучший ответ: Потому что не нужно бездумно использовать стрелочные функции где попало.
https://learn.javascript.ru/arrow-functions#u-stre...

Худший ответ: fileSelector.clickToSearch = (function() {console.log(this)})() //получишь fileSelector
fileSelector.clickToSearch = (() => {console.log(this)})() //получишь родителя fileSelector
Вопрос: Как переименовать загруженное изображение?

Лучший ответ: def content_file_name(instance, filename):
    return '/'.join(['content', instance.user.username, filename])

class Content(models.Model):
    name = models.CharField(max_length=200)
    file = models.ImageField(upload_to=content_file_name)
Как-то так

Худший ответ: Нужно менять название изображения, а не путь по которому она будет сохраняться.
Вопрос: Какой css фреймворк выбрать?

Лучший ответ: UIkit - актуальный, адекватный, решающий многие задачи, адаптивность, современный и т.д. и т.п....

Худший ответ: Было бы из чего выбирать
bootstrap
foundation
Вопрос: Как сделать чтобы while останавливался на 1 секунду?

Лучший ответ: while ($timer = 0) {

Это не условие, а присвоение. 
Код работает совсем не так как вы сейчас ожидаете. 

Добавьте недостающие !=

Худший ответ: ну у вас там написано sleep(60); это остановка на 60 сек. Если нужно 1 сек это 1. значит меняй на: sleep(1); это и есть 1 секундная пауза внутри while. или нужно что-то другое? и зачем вообще городить огород из while когда можно просто указать длину паузы?
Вопрос: Есть ли смысл RAID1 из SSD для отказоустойчивости?

Лучший ответ: Есть ли смысл RAID1 из SSD для отказоустойчивости?Для отказоустойчивости смысл есть.
Если вам нужна бесперебойная работа чтобы в случае выхода диска из строя работа не прерывалась и сервер не перезагружался нужен RAID1.В плане отказоустойчивости SSD диски намного выше HDD.Это почему? Вроде одинаково. Плюс в зеркале они будут изнашиваться одинаково и из строя выйдут в одно и то же время.Утверждение неверное. В зеркале они будут изнашиваться по разному, и выйдут из строя в разное время.Остается отказ SSD из-за скачка напряжения - это можно компенсировать поставив на входе хороший сетевой фильтр\UPS.Да, SSD не любят скачков напряжения, и потенциально могут выйти из строя в случае внезапного отключения питания. Хотя такое бывает крайне редко.
Самая частая причина отказа SSD - это зависание софта, проблемы с контроллером. В основном из за этого и выходят из строя.

Худший ответ: В плане отказоустойчивости SSD диски намного выше HDD
Не обоснованное высказывание.Плюс в зеркале они будут изнашиваться одинаково и из строя выйдут в одно и то же время.
Если мы говорим про износ, то, насколько я знаю, ячейки памяти износятся и станут доступны только на чтение.
Потери информации не произойдёт.Ну какая-то вероятность отказа платы управления диском. Но какова вероятность этого?
Вам этого никто не скажет.
Вероятность есть.
И диски и SSD могут скоропостижно умереть даже новые.Насколько рационально создавать RAID1 из SSD дисков для отказоустойчивости
Скажите, от чего вы хотите защититься?
Если это обычный диск на обычном компьютере (система+личные данные/данные), я считаю, что разумнее защититься с помощью резервного копирования.
Если вам нужна высокая доступность и работа оборудования 24/7 (сервер, СХД и тд), разумно использовать рейд из SSD или дисков.
Вопрос: Советы для изучения программирования с нуля (новичкам)?

Лучший ответ: Пишите
Больше
Кода
Хватит
Серфить
Инет

Худший ответ: Самые азы программирования. Что ещё нужно?Понимание структуры кода программы, операторов условий и циклов, ввод/вывод данных.
Банальная простая задачка: 
"Вводите с клавиатуры произвольные целые числа. После ввода каждого очередного значения будет выведена статистика кратности всех введённых чисел от 1 до 10-и. Пустой ввод или "0" - закончить и выйти."
Вопрос: Как добавлять и удалять элемент на страницу при уменьшении/ увеличении размеров экрана?

Лучший ответ: Используй media-запросы

Худший ответ: Лучше такое делать через media запросы, но если очень нужно через JQuery,  то вот рабочий пример:$(window).resize(function() {
		// проверяем ширину и существует ли див #col_mobile-slider, тем самым тело условия выполнится один раз
		if ($(window).width() < 1024 && $("#col_mobile-slider").length == 0) {
			$('#col_slider').append('<div class="col-xs-6" id="col_mobile-slider">Текст!</div>');
		}
		// Откатываем изменения при увеличении ширины окна (если нужно)
		else if($(window).width() > 1024 && $("#col_mobile-slider").length == 1) {
			$("#col_mobile-slider").remove();
		}
		return false;
	});
Вопрос: Есть ли различия в доменах com и pro?

Лучший ответ: pro дороже

Худший ответ: Для поисковиков без разницы.
Но я бы рекомендовал PRO, так как к теме сайта лучше подходит.

Вообще о выборе домена рекомендую статью.
Вопрос: Видел кто-нибудь быстрый алгоритм динамической генерации бесконечного пещерного лабиринта?

Лучший ответ: Условие простое: чтобы всегда был выход нужно сохранять зазор разворота - минимум 2 тоннеля рядом. Разворот - делать вдоль своего "тела" наружу, чтобы не упереться в тупик.
(Т.е., тут алгоритм предотвращения запутывания змейки)

Худший ответ: Вроде тот же алгоритм, с той лишь разницей, что генерация ведется не до тех пор, когда пространство для генерации кончится, а до тех пор, когда будет достигнута заданная глубина (или расстояние) от текущей позиции.
А дальше начинаются оптимизационные моменты, которые зависят от нюансов задачи. К примеру, в 2D вам, скорее всего, нужно заполнить экран и немного за экраном. А в 3D прямой коридор придется делать бесконечно, пока он наконец не повернет, ведь пользователь от первого лица должен увидеть конец коридора, а не пустоту, каким бы длинном он ни был.
Далее не понятно, как вы данные храните. Если у вас нет поля заданного размера, то хоть какое-то поле есть? Или каждая клетка/комната/соединение у вас представлены отдельным объектом в куче? И лабиринт по сути не сетка, а граф? От этого алгоритм тоже зависит.