singlepost

Журнал быдлокодера << На главную или назад  

Собственно, чтобы не плодить множество тем, хотелось бы создать одну, где люди могут выкидывать удавшиеся и не очень решения, дабы мудрые Анонимусы их исправляли, указывали на ошибки, на неточности и попросту на быдлокод…

Итак, начну.
Задача звучит так: в матрице NxN найти наименее весомый путь из точки 1;1 до точки N;N. дополнение(автор снубил): ходить можно только направо и вниз. Вывести путь…

//dumpz.org/16541/

Задача решена, но что-то мне подсказывает, что не наилучшим способом. Кому делать нечего – покурите…

95 ответов в теме “Журнал быдлокодера”

  1. 30
    Александр Лищенер ответил:

    спасибо за ответы.)

  2. 29
    Денис Федоренко ответил:

    Вообще, я что-то слабо себе представляю участок кода, который "работает быстро, но нифига не ясно как".
    И, да. Экономить на спичках никогда (или почти никогда) не надо.

  3. 28
    Денис Федоренко ответил:

    Для этого еще существуют такие замечательные вещи, как комментарии.
    Вообще код должен быть прозрачным. Не помню точно кто (но кто-то из гуру) писал, что код надо создавать так, будто его потом будет поддерживать неуравновешанный маньяк, который чуть что готов порезать и съесть (ну это в вольной интерпретации, конечно).

  4. 27
    Денис Лисов ответил:

    Это место критично с точки зрения быстродействия? Если нет, то однозначно пониманию. Если да – то тоже пониманию, но можно сразу написать и альтернативную "быструю" версию.
    Оптимизация необходима не всегда и, как правило, уже после написания программы.
    А вы запишите ход решения в комментариях. Они для того и нужны.

  5. 26
    Александр Лищенер ответил:

    возник вопрос: если стоит выбор между быстродействием и пониманием, чему отдавать предпочтение?
    всякие Павловские пишут, что однозначно второму…
    в самом деле, я знаю, как написать так, чтобы это было красиво, но не знаю, как это объяснить даже самому себе после того, как забуду ход решения…

  6. 25
    Александр Лищенер ответил:

    а есть же дефолтная "sizeof(xxx)"…
    я всегда писал макросами)
    спасибо)

  7. 24
    Денис Лисов ответил:

    Если не ошибаюсь, да, в файле limits.h живет.

  8. 23
    Денис Лисов ответил:

    С учетом же дополнения, на мой взгляд, ваш алгоритм вполне удачен. Единственное – раз уж вы выделяете массив на N+1, можете заполнить нулевую строчку и нулевой столбец INT_MAX-ами, что позволит вам избавиться от большинства специальных случаев с проверками на первый столбец или первую строку.

  9. 22
    Александр Лищенер ответил:

    не додумался. он есть как константа? так и называется "INT_MAX"?

  10. 21
    Денис Лисов ответил:

    #19, к сожалению, это не гарантируется. К примеру, MS Visual Studio 2010 Beta 2, по отзывам судя, это еще не поддерживает, не знаю про более поздние версии.
    Официально это называется variable-length array, чтобы вам удобнее искать было.

  11. 20
    Александр Лищенер ответил:

    я под g++ собираю, даже не знаю, какие там в мягком компиляторы(
    спасибо.)

  12. 19
    Александр Лищенер ответил:

    да, забыл, в условии:
    можно ходить только вниз и направо

  13. 18
    Александр Лищенер ответил:

    #17, спасибо за ответ. думаю, на большинстве современных машин он реализован.

  14. 17
    Александр Лищенер ответил:

    хотя туплю, что "думать", покурю гугл

  15. 16
    Денис Лисов ответил:

    #9. Ответ №1: эта возможность появилась только в стандарте C99, который до сих пор реализован далеко не везде. Если требуется совместимость с более старым C89 или с компиляторами, не поддерживающими массивы переменной длины, их использовать не следует.

  16. 15
    Александр Лищенер ответил:

    #13, ну это не то, ты меня не совсем понял.)
    #14, спасибо, хорошый ссыль.

    #9 намекает какбе, что код у меня плохой, а алгоритм неверный. правда почему, так и не объяснил)

  17. 14
    Денис Лисов ответил:

    Потому что я задам матрицу вида
    1 100 1 11
    1 100 1 100 1
    1 100 1 100 1
    1 100 1 100 1
    1 11 100 1
    Здесь самый дешевый путь – змейкой, но ваша программа его не найдет – она не умеет ходить вверх и влево.

  18. 13
    Дмитрий Щёголев ответил:

    №9 хороший код комментирует сам себя

  19. 12
    Валера Марсель ответил:

    //algolist.manual.ru/

  20. 11
    Вася Пупкинъ ответил:

    P.S.: называние себя быдлокодером, так же как и называние себя мего програмистом – две крайности одной сущности

    P.P.S.: собрал для тебя немного ссылок для начала:

    //www.wasm.ru
    //www.rsdn.ru
    //www.gamedev.ru
    //www.uninformed.org (немного узкоспециализированно)
    fprog.ru

  21. 10
    Вася Пупкинъ ответил:

    2 Александр Лищенер
    Хочешь стать програмистом? Перестань сидеть фконтакте.
    Иди на форумы где сидят люди с большим опытом.
    Учись у НИХ, а не ЗДЕСЬ

  22. 9
    Денис Федоренко ответил:

    > чтобы указывали на МОИ ошибки

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

    > в коде очень не хочется ковыряться

    +1
    Особенно в котором ни одного коммента нет даже.

  23. 8
    Александр Лищенер ответил:

    2МужикНеВКраснойКуртке

    я знаю, про нуль. так удобнее, пока, по крайней мере.)
    нет, структура менее удобна

    ммм. задача у меня получилась. я просто выкинул код, чтобы всякий, кто хочет, мог на него полюбоваться, а кому совсем делать нечего – сказать мне, где можно было лучше)
    так яснее?

    кстати, вопрос №1.
    вроде размеры массива должны быть константные, нет?
    почему можно
    int N;
    int array[N];
    ?

  24. 7
    Александр Лищенер ответил:

    Денис, почему это алгоритм неверый О_о?

  25. 6
    Максим Андрощук ответил:

    #6 Да граф хранится как матрица смежности, просто я не совсем верно выразился))

  26. 5
    Владимир Гордеев ответил:

    2МужикВКраснойКуртке.

    В C массивы нумеруются с нуля.

    И ещё, может результат хранить в struct {int x; int y;} result[N] ?

    Ты скажи словами как ты делаешь, в коде очень не хочется ковыряться.

  27. 4
    Денис Федоренко ответил:

    #2
    А вы каким образом в программе граф храните, нежели не в матрице смежности? :) Интересно узнать.

    Александр, код действительно лажовенький, точнее, велосипедный.
    Сам когда-то писал такое, используя алгоритм Дейкстры, как справедливо и верно заметил Максим.
    На всякий случай, вот код (на чистых сях, правда):
    //www.sadreamer.net/sources/show/9

  28. 3
    Александр Лищенер ответил:

    прошу администрацию забанить Антона, или Антона не дурить. это, конечно, смешно, но у всего есть свои пределы.

    Максим, мне очень стыдно, но я не изучал делфи и о графах знаю только то, что они есть).
    Дейстру покурю, спасибо…

  29. 2
    Александр Лищенер ответил:

    а вообще хотелось бы, чтобы указывали на МОИ ошибки, а не на возможные способы решения задачи :)

  30. 1
    Максим Андрощук ответил:

    Решал подобную задачу, толко у меня в задании был дан граф и нужно было найти минимальный путь к одной заданой вешины графа из всех остальных( в принципе матрицу можна представить в виде графа, так что задание оч похоже). Использовал алгоритм Дейкстры.Если будет нужно могу выложить и исходники (Delphi)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.