Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
988 Въведение в програмирането със C#<br />
Пишете стъпка по стъпка. Първо направете четенето на входните данни.<br />
(В случая входът е от файл и затова можете да започнете от него. Ако<br />
входът беше от конзолата, трябваше да го оставите за най-накрая).<br />
Реализирайте отпечатване на прочетените данни. Реализирайте<br />
алгоритъма за най-къс път. Ако можете, разбийте реализацията на<br />
стъпки. Например като за начало можете да търсите само дължината на<br />
най-късия път без самия път (като списък от кръстовища), защото е полесно.<br />
Реализирайте след това и намирането на самия най-къс път.<br />
Помислете какво става, ако има няколко най-къси пътя с еднаква<br />
дължина. Накрая реализирайте отпечатването на резултатите, както се<br />
изисква в условието на задачата.<br />
Тествайте решението си! Пробвайте с празна карта. Пробвайте с карта<br />
с 1 кръстовище. Пробвайте случай, в който няма път между зададените<br />
кръстовища. Пробвайте с голяма карта (1 000 кръстовища и 5 000<br />
улици). Можете да си генерирате такава с няколко реда програмка. За<br />
имената на кръстовищата трябва да използвате string, а не char, нали?<br />
Иначе как ще имате 1 000 кръстовища? Работи ли вашето решение<br />
бързо? А работи ли вярно?<br />
Внимавайте с входните и изходните данни. Спазвайте формата, който е<br />
указан в условието на задачата!<br />
4. Ако не сте много силни в аналитичната геометрия, едва ли ще измислите<br />
решение на задачата сами. Опитайте търсене в Интернет по ключовите<br />
думи "convex hull algorithm". Знаейки, че оградата, която трябва да<br />
построим се нарича "изпъкнала обвивка" (convex hull) на множество<br />
точки в равнината, ще намерим стотици статии в Интернет по темата, в<br />
някои дори има сорс код на C#. Не преписвайте грешките на другите и<br />
особено сорс кода! Мислете! Проучете как работи алгоритъмът и си го<br />
реализирайте сами.<br />
Проверете дали алгоритъмът е верен. Пробвайте различни примери<br />
(първо на хартия). Какво става, ако има няколко точки на една линия<br />
върху изпъкналата обвивка? Трябва ли да включвате всяка от тях?<br />
Помислете какво става, ако има няколко изпъкнали обвивки. От коя<br />
точка започвате? По часовниковата стрелка ли се движите или обратното?<br />
В условието на задачата има ли изискване как точно да са подредени<br />
точките в резултата?<br />
В каква структура от данни ще пазите точките? В каква структура ще<br />
пазите изпъкналата обвивка?<br />
Помислете за ефективността. Ще работи ли вашият алгоритъм за 1 000<br />
точки?<br />
Пишете стъпка по стъпка. Първо направете четенето на входните данни.<br />
Реализирайте отпечатване на прочетените точки. Реализирайте<br />
алгоритъма за изпъкнала обвивка. Ако можете, разбийте реализацията