Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отсортировать массив, алгоритм 
:(
    Опции темы
lamber
Дата 22.4.2011, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 20.12.2008

Репутация: нет
Всего: нет



Есть структура вида
Код

struct edge
{
public string _out;
public string _in;
}


есть массив этих структур (пар), нужно из них получить массив упорядоченных элементов таким образом чтобы связанные элементы шли от первого элемента к последнему. Предполагаем что в данной структуре нет петель, первый элемент не имеет входящих элементов, а последний исходящих. думаю лучше пояснить на примере.
a-b
a-c
c-e
b-e
e-d

вот у нас дан массив из него нужно сформировать массив элементов вида {a,b,c,e,d} либо {a,c,b,e,d} вот не знаю как решить подобную задачу.

Это сообщение отредактировал(а) lamber - 22.4.2011, 11:25
PM MAIL   Вверх
mihryak
Дата 22.4.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Код

    class Test
    {
        public Test(string inValue, string outValue)
        {
            In = inValue;
            Out = outValue;
        }

        public string In { get; set; }
        public string Out { get; set; }

        public override string ToString()
        {
            return string.Format("{0}:{1}", In, Out);
        }
    }

    class Program
    {
        static List<List<Test>> GetSequences(List<Test> tests)
        {
            List<List<Test>> sequences = new List<List<Test>>();
            var rootElements = tests.Where(t => t.In == tests[0].In);
            foreach (var root in rootElements)
            {
                List<Test> sequence = new List<Test> {root};
                sequences.Add(sequence);
                FindDescendants(sequences, sequence, tests);
            }

            return sequences;
        }

        static void FindDescendants(List<List<Test>> sequences, List<Test> currentSequence,
            List<Test> testRepository)
        {
            bool createNewSecuence = false;
            Test lastItem = currentSequence.Last();
            List<Test> savedCurrentSequence = new List<Test>(currentSequence);
            foreach (Test descendant in testRepository.Where(t => t.In == lastItem.Out))
            {
                List<Test> sequence;
                if (createNewSecuence)
                {
                    sequence = new List<Test>(savedCurrentSequence);
                    sequences.Add(sequence);
                }
                else
                {
                    sequence = currentSequence;
                }
                sequence.Add(descendant);
                FindDescendants(sequences, sequence, testRepository);
                createNewSecuence = true;
            }            
        }

        static void Main(string[] args)
        {
            List<Test> tests = new List<Test>
                {
                    new Test("a", "b"),
                    new Test("a", "c"),
                    new Test("c", "e"),
                    new Test("b", "e"),
                    new Test("b", "d"),
                    new Test("e", "d")
                };

            var sequences = GetSequences(tests);

            foreach (List<Test> sequence in sequences)
            {
                Console.WriteLine(string.Join(" => ", sequence.Select(t => t.ToString()).ToArray()));
            }
            Console.ReadKey();
        }
    }


Это сообщение отредактировал(а) mihryak - 22.4.2011, 14:16
PM MAIL ICQ   Вверх
A5uKa
Дата 22.4.2011, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Код

return table.AsEnumerble().GroupBy(x=> x._out).SortBy(x=> x._out);


не ?
PM   Вверх
mihryak
Дата 22.4.2011, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



Цитата(A5uKa @  22.4.2011,  15:56 Найти цитируемый пост)
не ?

не.
PM MAIL ICQ   Вверх
A5uKa
Дата 22.4.2011, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: нет
Всего: 16



Цитата(mihryak @ 22.4.2011,  15:38)
Цитата(A5uKa @  22.4.2011,  15:56 Найти цитируемый пост)
не ?

не.

почему ?
PM   Вверх
mihryak
Дата 22.4.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 19
Всего: 36



потому что результат будет не тот
совсем не тот
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.