Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
141 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
1

GPS навигатор в консольном приложении

05.01.2012, 01:05. Показов 3756. Ответов 4
Метки нет (Все метки)

Люди, прошу помощи. Я тут мозг себе ломаю об стену, уже не могу, как можно находить короткие пути как это делают в играх и в GPS навигаторах тоже. Вот код того, что я делал, но устал ужасно, это не выгодно как-то, но действует.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using System;
using System.Threading;
class Program
{
    static void Main()
    {
        back:
        int i;
        //Основной путь
        //-------------------------
        const int SHS_to_RSS = 12;
        const int RSS_to_MVS = 3;
        const int MVS_to_BHS = 19;
        const int BHS_to_BAS = 20;
        const int BAS_to_OMS = 27;
        //-------------------------
        //Побочный путь
        //-------------------------
        const int RSS_to_OMS = 16;
        const int RSS_to_BHS = 23;
        Console.Title = "GPS https://www.cyberforum.ru";
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("\tGPS от irineyxxx");
        string[] NamesOfStations =
        {"Станция Высушенная Голова", "Станция Жаренный Лосось", "Станция Маньяки и Водочники",
         "Станция Черный Молот", "Станция Кровавый Выкидыш", "Станция Древний Мутант"};
        for (i = 0; i < NamesOfStations.Length; i++)
        {
            Console.WriteLine((i + 1) + ": " + NamesOfStations[i]);
        }
        try
        {
            Console.WriteLine();
            Console.Write("Выберите соответствующую цифру для начала пути А: ");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            int A = int.Parse(Console.ReadLine());
            Console.ForegroundColor = ConsoleColor.Green;
            if (A == 1) Console.WriteLine("A: " + NamesOfStations[0]);
            else if (A == 2) Console.WriteLine("A: " + NamesOfStations[1]);
            else if (A == 3) Console.WriteLine("A: " + NamesOfStations[2]);
            else if (A == 4) Console.WriteLine("A: " + NamesOfStations[3]);
            else if (A == 5) Console.WriteLine("A: " + NamesOfStations[4]);
            else if (A == 6) Console.WriteLine("A: " + NamesOfStations[5]);
            else
            {
                Console.WriteLine("Ввод некорректен. Превышен диапозон значений.");
                Thread.Sleep(1500);
                Console.Clear();
                goto back;
            }
            Console.Write("Выберите соответствующую цифру для конца пути B: ");
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            int B = int.Parse(Console.ReadLine());
            Console.ForegroundColor = ConsoleColor.Green;
            if (B == 1) Console.WriteLine("B: " + NamesOfStations[0]);
            else if (B == 2) Console.WriteLine("B: " + NamesOfStations[1]);
            else if (B == 3) Console.WriteLine("B: " + NamesOfStations[2]);
            else if (B == 4) Console.WriteLine("B: " + NamesOfStations[3]);
            else if (B == 5) Console.WriteLine("B: " + NamesOfStations[4]);
            else if (B == 6) Console.WriteLine("B: " + NamesOfStations[5]);
            else
            {
                Console.WriteLine("Ввод некорректен. Превышен диапозон значений.");
                Thread.Sleep(1500);
                Console.Clear();
                goto back;
            }
            if (B == A)
            {
                Console.WriteLine("Введённые данные не соответствуют стандартам реализации.");
                Thread.Sleep(1500);
                Console.Clear();
                goto back;
            }
            Thread.Sleep(500);
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WriteLine("Начиную путь...");
            Console.ForegroundColor = ConsoleColor.Green;
            //----------------------------------------------------------------------
            //НАЧАЛО А1
            if (A == 1 & B == 2)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[1] + " = " + SHS_to_RSS + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS);
            }
            else if (A == 1 & B == 3)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[2] + " = " + (SHS_to_RSS+RSS_to_MVS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS);
            }
            else if (A == 1 & B == 4)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[3] + " = " + 
                    (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS);
            }
            else if (A == 1 & B == 5)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[4] + " = " +
                    (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS + BHS_to_BAS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS);
            }
            else if (A == 1 & B == 6)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[5] + " = " +
                    (SHS_to_RSS + RSS_to_MVS + MVS_to_BHS + BHS_to_BAS + BAS_to_OMS) + " км,");
                Console.WriteLine("если проходить его длинным путем.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + MVS_to_BHS 
                    + " " + BHS_to_BAS + " " + BAS_to_OMS + " = этот путь длинный.");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("От " + NamesOfStations[0] + " до " + NamesOfStations[5] + " = " +
                    (SHS_to_RSS + RSS_to_MVS + BAS_to_OMS) + " км,");
                Console.WriteLine("если проходить его коротким путем.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS + " " + RSS_to_MVS + " " + BAS_to_OMS + " = этот путь короткий.");
            }
            //--------------------------------------------------------------------КОНЕЦ А1
            else if (A == 2 & B == 1)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[0] + " = " + SHS_to_RSS + " км.");
                Console.WriteLine("Путь: " + 0 + " " + SHS_to_RSS);
            }
            else if (A == 2 & B == 3)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[2] + " = " + RSS_to_MVS + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS);
            }
            else if (A == 2 & B == 4)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[3] + " = " + (RSS_to_MVS + MVS_to_BHS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS);
            }
            else if (A == 2 & B == 5)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[4] + " = " + (RSS_to_MVS + MVS_to_BHS + 
                    BHS_to_BAS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS);
            }
            else if (A == 2 & B == 6)
            {
                Console.WriteLine("Путь найден.");
                Thread.Sleep(500);
                Console.WriteLine("От " + NamesOfStations[1] + " до " + NamesOfStations[5] + " = " + (RSS_to_MVS + MVS_to_BHS +
                    BHS_to_BAS + BAS_to_OMS) + " км.");
                Console.WriteLine("Путь: " + 0 + " " + RSS_to_MVS + " " + MVS_to_BHS + " " + BHS_to_BAS + " " + BAS_to_OMS);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Invalid variable. " + e);
            Thread.Sleep(1500);
            Console.Clear();
            goto back;
        }
        Console.WriteLine();
        Console.WriteLine("Нажмите любую клавишу для повторного вычисления пути.");
        Console.ReadKey();
        Console.Clear();
        goto back;
    }
}
Делал этот код по этой картинке [смотреть картинку]. Еще раз скажу то, что код работает , но я себе мозг ломаю от этого кода, можно как-нибудь в 10 раз проще его сделать ?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
GPS навигатор в консольном приложении  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2012, 01:05
Ответы с готовыми решениями:

Меню в консольном приложении
Доброго времени суток. Вот необходимо сделать интерфейс в консольном приложении. Я его сделал с...

DispatcherTimer в консольном приложении
Можно ли использовать таймер DispatcherTimer в консольном приложении c#? И если можно, то как...

Ошибка в консольном приложении
Вылетает консольное приложение, не могу понять, что не так, ниже код: namespace...

Таблица в консольном приложении
for (int i = 1; i &lt;= 255; i++) { Console.Write(Convert.ToChar(i)); ...

4
141 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
05.01.2012, 01:25  [ТС] 2
*скажу еще на заметку то, что - прошу без LINQ

Добавлено через 18 минут
Люди, давайте вместе разбирать эту тему, ведь многим - она нужна будет - особенно новичкам - очень ценный урок.
0
Эксперт .NET
15344 / 11631 / 3052
Регистрация: 17.09.2011
Сообщений: 19,469
05.01.2012, 01:31 3
Так зачем вы мучаетесь? Дедушка Дейкстра же давно изобрел для вас решение в виде своего знаменитого алгоритма.
Все что остается - это его реализовать.
1
141 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
05.01.2012, 15:32  [ТС] 4
kolorotur, Покажите мне ваш код, над моей картинкой, мне очень интересно посмотреть на ваши знания обхода графа. Буду очень признателен Вам, за ваш , именно ваш код и не чей больше!

Добавлено через 7 минут
По предсказанием дедушки, вроде так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args)
        {
            int[,] L ={
                {-1,  5, -1, -1, -1,  3, -1, -1}, 
                { 5, -1,  2, -1, -1, -1,  3, -1}, 
                {-1,  2, -1,  6, -1, -1, -1, 10}, 
                {-1, -1,  6, -1,  3, -1, -1, -1},
                {-1, -1, -1,  3, -1,  8, -1,  5}, 
                { 3, -1, -1, -1,  8, -1,  7, -1}, 
                {-1,  3, -1, -1, -1,  7, -1,  2}, 
                {-1, -1, 10, -1,  5, -1,  2, -1} 
            };
            Dijkstra clss = new Dijkstra((int)Math.Sqrt(L.Length),L);
А нет, хотя ошибаюсь

Добавлено через 1 час 17 минут
Люди помогите

Добавлено через 12 часов 33 минуты
я просто фигею от того, что никто не знает как делать ))0 честно ))0 я просто от стула падаю , когда смотрю свою тему
0
Злой няш
1983 / 1411 / 515
Регистрация: 05.04.2010
Сообщений: 2,665
05.01.2012, 15:58 5
Цитата Сообщение от irineyxxx Посмотреть сообщение
Еще раз скажу то, что код работает
Если добавить или убрать одну из вершин, то ничего работать точно не будет. Вообще надо отвыкать копи-пастить.

Цитата Сообщение от irineyxxx Посмотреть сообщение
скажу еще на заметку то, что - прошу без LINQ
Очень даже зря. Он на порядок облегчает задачу и в нем нет абсолютно ничего сложного.

Цитата Сообщение от irineyxxx Посмотреть сообщение
я просто фигею от того, что никто не знает как делать
Написать код по уже готовому алгоритм - пару часов дело. Не всем эта затея интересна.

Когда-то на этом форуме выкладывал исходники с полной реализацией алгоритма по ссылке выше, который находит длину кратчайшего пути. После, вроде на следующий день, улучшил алгоритм тем, что он еще находит сам путь. Если таких путей много, то это будет один из них, причем какой, зависит от исхода алгоритма.
Сам исходник можно скачать по этой ссылке: Dijkstra.rar.
Комментарии есть, но чтобы понимать как взаимодействуют классы между собой наведу некоторую описательную часть:
Description.cs - класс, который хранит описательную часть вершины для алгоритма: была ли вершина посещена, расстояние до нее от начальной вершины и название вершины, от которой можно попасть к ней.
Node.cs - сама вершина, которая из себя ничего не представляет - абстрактная пустышка. Уникальное название вершины хранится в структуре на уровне выше, а сам этот класс нужен для хранения всех связей с текущей вершиной.
Link.cs - класс, который описывает связи между вершинами. Может показаться немного странным то, что здесь информация только о второй вершине и расстоянии до нее, но информация о первой вершине хранится только один раз уровнем выше.
Graph.cs - реализация одного, из возможных представлений графа. В нем же и есть метод, который реализует алгоритм Дейкстры на основе уже описанных понятий с обильным применением Linq и коллекций. Стоит только заметить, что способ получения самого пути происходит с конечной вершины и потому сразу же происходит реверс.
Могу только добавить то, что некоторые участки кода можно написать еще оптимальнее во вред читабельности. А сам пример для проверки алгоритма взят со статьи ссылкой выше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2012, 15:58

Кнопка в консольном приложении
Всем привет! Каким образом можно в C# консольное приложение добавить кнопку?

Чат в консольном приложении
Помогите пожалуйста создать чат в консольном приложении. Вот хотела с подругой початиться. Очень...

GPS навигатор на планшет windows 8.1 с модулем GPS (DIGMA EVE 8.0)
Здравствуйте. Всех с наступившим годом и рождеством! Прошу помощи, есть планшет с GPS (DIGMA EVE...

Посоветуйте GPS навигатор до 10т.р.
Привет всем 1) посоветуйте жпс навигатор который вы бы выбрали себе невзирая на цену. ( ну или...

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

Возможно ли подключить gps навигатор к программе?
возможно ли подключить gps навигатор к проге . Если же возможно пожалуйста хотя-бы коротенько...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.