Эй, двач, есть тут гениальные погромисты? Пишу тут одну программу (C#), и уже несколько дней не могу справиться со следующим:Есть набор точек, некоторые из них связанны друг с другом, нужно написать функцию, которая по этим связям выстраивает все пути из некой точки X в некую точку Y. К примеру, есть вот такие точки (см. пикрил 1), нужно найти все пути из A в F. Функция должна будет вернуть лист(или массив) с 4 объектами (AXF, ABCXF, ABCXDEF, AXDEF).На данный момент есть класс Path, который содержит в себе набор точек класса PathPoint, ну и собственно сам класс PathPoint с полями double X, Y, Z, а так же полем List<PathPoint> Links, которое содержит другие точки, с которыми данная точка связана. (Например, A.Links = {B, X})Нужна какая-то рекурсия с циклами вроде for/foreach, но максимум, чего мне удалось достичь, это то, что функция находила 1 путь, идущий из A через B, который попадал в массив, и 1 путь, идущий из А через X (это был путь AXCB, и он в массив не попадал, т.к. ведет не в F).Чет очень долго мудохаюсь с этим, пока мои функции выглядят так (см. пик 2)
ьамп
бамп
еще бамп
Я бы использовал волновой алгоритм
>>158043282Ща загуголю
А пока бамп
Зачем оно надо?
В каждой точке модно побывать не более одного раза?
>>158043743Ну да, иначе все зациклится навечноВ дальнейшем надо будет найти кратчайший путь, но с этим проблем не возникнет
>>158043743Хотя из твоего описания ясно что да.Просто рекурсивный шаг, который останавливается, если найдена последняя точка или мы попали в вершину графа в которой уже побывали. Подозреваю оптимальнее по времени и памяти не получится, по времени уж точно. Но ты лучше скажи зачем тебе это, может мы получше решение подскажем, да и вообще на мейлаче доска есть для таких вопросов.
>>158043842Если нужен кратчайший, то по времени можно получить лучше, вееромпускаешь всевозможные шаги, пока не попадешь в нужную точку, единственное памяти может е хватить, нужно проверять, что не попал в вершину в которой побывал.
>>158043964Ну т.е. в твоем варианте на первом шаге получаешьaxabпотомabcaba(отбрасываем)axf - закончили поиск
>>158043866Делаю бота для игры, планирую сделать для локации карту, которая будет состоять из таких вот путей, чтобы в дальнейшем он мог по ней ориентироваться. Сперва хотел найти все возможные пути, а потом уже найти самый короткий среди них, тут стоит понимать, что самый короткий – не всегда тот, в котором меньше всего точек, искать буду именно длину (сумму длин отрезков в пути)
>>158044139Тогда перебирай все варианты, просто выкидывая те, в которых встречаются повторяющиеся буквы. Возможно, проще будет сразу написать ему все маршруты.
>>158044233Так и пытался делать, заводил переменную Path temp, перебирал варианты, записывая в temp очередную букву, в конце temp закидывал в result. Но так получалось, что составив путь(например, AXCB), программа хоть и выходила из цикла foreach, значение переменной temp было AXCB, и она продолжала дальше пихать в эту переменную другие буквы, вместо того, чтобы начать формировать новый путь. Я уже вообще не соображаю, что я делаю не так
бамп, может еще кто подскажет
>>158043123 (OP)Алгоритмы поиска пути из сферы игродела не подойдут?
Песдец, господа погромисты. Овердесяти постов и никто блять не упомянул что задача решена 50 лет назад в общем случае. Велосипедостроители хуевы. Топикстартер,пиздуй в википедию и гугли "Алгоритм Дейкстры". И прочитай йобаного Седжвика иди какого другого умного дядьеу, чьобы не изобретать велосипеды там где они не нужны
>>158044677Вообще это уже решеная задача. погугли. Но давно давно, будучи школьником сам её решал довольно смешным способом.
>>158044496Прочти, но это проблемы не алгоритма, а того, что ты - дерьмовый кодер. Алсо почитай про рекурсию, возможно, проблема в этом. Просто почитай определение и глянь примеры.
>>158044751Этому полуебку надо вообще все пути перебрать, нахуй ему дейкстра чтобы перебирать этот комбинаторный пиздец, лол кек.
Как я понял, алгоритмом Дейкстры я найду кратчайшее расстояние, а сам путь мне как записать?
Кури основы теории графов. Там именно то, что тебе нужно. Чтобы таких проблем не было, люди вышку получают, лолИ да, Дейкстру не нужно, из пушки по воробьям.
>>158046213Ну я не программист изначально, изучаю по мере необходимости. Попробую поискать что-то по теме, но было бы неплохо найти хоть какое-то решение для начала,а потом уже оптимизировать
>>158046348Короче, предлагаю тебе простое. Создаешь у каждого узла счетчик, который 0 если ты еще не был в узле, и 1 если был. Дальше делаешь реккурентную функцию которая бегает по всем возможным путям, и как только доходит до B записывает куда-нибудь этот путь.
>>158046348а какое у тебя образование?
>>158047148филологическое