Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
1

Перевод с с++ (Алгоритм Дейкстра)

12.02.2014, 16:55. Показов 1097. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Благодарю
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
 
 
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define word unsigned int
using namespace std;
 
int i, j, n, p, xn, xk;
int flag[11];
word c[11][11], l[11];
char s[80], path[80][11];
 
int min(int n)
{
    int i, result;
    for (i = 0; i<n; i++)
    if (!(flag[i])) result = i;
    for (i = 0; i<n; i++)
    if ((l[result]>l[i]) && (!flag[i])) result = i;
    return result;
}
 
word minim(word x, word y)
{
    if (x<y) return x;
    return y;
}
 
void main()
{
    cout << "Counte dots: ";
    cin >> n;
    for (i = 0; i<n; i++)
    for (j = 0; j<n; j++) c[i][j] = 0;
    for (i = 0; i<n; i++)
    for (j = i + 1; j<n; j++)
    {
        cout << " Weight of edge  x" << i + 1 << " do x" << j + 1 << ": ";
        cin >> c[i][j];
    }
    cout << "   ";
    for (i = 0; i<n; i++) cout << "    X" << i + 1;
    cout << endl << endl;
    for (i = 0; i<n; i++)
    {
        printf("X%d", i + 1);
        for (j = 0; j<n; j++)
        {
            printf("%6d", c[i][j]);
            c[j][i] = c[i][j];
        }
        printf("\n\n");
    }
    for (i = 0; i<n; i++)
    for (j = 0; j<n; j++)
    if (c[i][j] == 0) c[i][j] = 65535; //nekonecno
    cout << " start: ";
    cin >> xn;
    cout << " finish: ";
    cin >> xk;
    xk--;
    xn--;
    if (xn == xk)
    {
        cout << "error, start and end dots cannot be simple." << endl;
        getch();
        return;
    }
 
    for (i = 0; i<n; i++)
    {
        flag[i] = 0;
        l[i] = 65535;
    }
    l[xn] = 0;
    flag[xn] = 1;
    p = xn;
    itoa(xn + 1, s, 10);
    for (i = 1; i <= n; i++)
    {
        strcpy(path[i], "X");
        strcat(path[i], s);
    }
    do
    {
        for (i = 0; i<n; i++)
        if ((c[p][i] != 65535) && (!flag[i]) && (i != p))
        {
            if (l[i]>l[p] + c[p][i])
            {
                itoa(i + 1, s, 10);
                strcpy(path[i + 1], path[p + 1]);
                strcat(path[i + 1], "-X");
                strcat(path[i + 1], s);
            }
            l[i] = minim(l[i], l[p] + c[p][i]);
        }
        p = min(n);
        flag[p] = 1;
    } while (p != xk);
    if (l[p] != 65535)
    {
        cout << "Put: " << path[p + 1] << endl;
        cout << "Dlina puti: " << l[p] << endl;
    }
    else
        cout << "Путь не существует!" << endl;
    getch();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2014, 16:55
Ответы с готовыми решениями:

Алгоритм дейкстра
Нужно запрограммировать алгоритм Дейкстра. Не понимаю как можно дальше найти путь в массиве для...

Алгоритм Дейкстры, перевод с Pascal
есть программа на языке Pascal, реализующий алгоритм Дейкстры, которую нужно переделать под С#...

Исходник Дейкстра
Здравствуйте ! Может у кого-нибудь есть исходник &quot;Поиск кратчайшего пути в графе по алгоритму...

Перевод с C++. Алгоритм генерирующий все подмножества с повторениями
это нерекурсивный алгоритм генерирующий все подмножества с повторениями #include &lt;iostream&gt;...

16
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
12.02.2014, 17:08 2
cin == Console.ReadLine\Read
cout == Console.WriteLine\Write

Остальное почти без изменений
1
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
12.02.2014, 17:15  [ТС] 3
if (!(flag[i])) result = i;
!flag[i] вызывает ошибку
0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
12.02.2014, 17:34 4
Цитата Сообщение от BabyGluk Посмотреть сообщение
!flag[i] вызывает ошибку
В C# так нельзя делать, нужно явно привести в тип bool.
C#
1
2
3
if(!Boolean.Parse(flag[i] + ""))
или
if(!Boolean.Parse(flag[i].toString()))
1
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
12.02.2014, 17:39 5
может надо так
C#
1
if (!(flag[i]==1)) result = i;
1
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
12.02.2014, 17:47 6
Упс, прошу прощения за первый код, он не работает, преобразование нужно выполнять так:
C#
1
if(!Convert.ToBoolean(flag[i]))
1
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
12.02.2014, 17:49 7
Цитата Сообщение от dirtez0 Посмотреть сообщение
if(!Convert.ToBoolean(flag[i]))
тот еще изврат
1
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
12.02.2014, 18:08  [ТС] 8
Щас попробую что нибудь сделать, а как с импортами библиотек??
atoi,strcpy и тд??
0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
12.02.2014, 18:12 9
Цитата Сообщение от паха76 Посмотреть сообщение
тот еще изврат
Зачем же? И что вы считаете не "извратным" решением данной проблемы?
Я просто начинающий, просветите.

Добавлено через 3 минуты
Цитата Сообщение от BabyGluk Посмотреть сообщение
atoi,strcpy и тд??
C# может пользоваться аналогичными по смыслу библиотеками классов .NET
Вот ссылка, ищите.
0
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
12.02.2014, 18:15 10
Цитата Сообщение от dirtez0 Посмотреть сообщение
не "извратным" решением данной проблемы
является явное сравнение с 0, ибо плюсы умеют считать 0 за false, а решетки нет, что и озвучил da1z
0
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
12.02.2014, 18:19 11
Цитата Сообщение от dirtez0 Посмотреть сообщение
Упс, прошу прощения за первый код, он не работает, преобразование нужно выполнять так:
C#
1
if(!Convert.ToBoolean(flag[i]))
Да тут вообще в принципе никаких преобразований не нужно
C#
1
if(flag[i] == 0) ...
0
44 / 44 / 19
Регистрация: 20.01.2014
Сообщений: 87
12.02.2014, 18:24 12
Цитата Сообщение от паха76 Посмотреть сообщение
является явное сравнение с 0, ибо плюсы умеют считать 0 за false, а решетки нет, что и озвучил da1z
В своём первом сообщений я это и имел в виду.

Цитата Сообщение от паха76 Посмотреть сообщение
ибо плюсы умеют считать 0 за false, а решетки нет
Именно это и делает Convert.ToBoolean(Int32).
0
26 / 26 / 10
Регистрация: 22.12.2013
Сообщений: 153
12.02.2014, 18:30 13
что-то мне подсказывает, что оптимизатор такой г***окод заменит на проверку на 0 с переходом
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
12.02.2014, 18:46 14
паха76, вряд ли. Оптимизатор С намного интеллектуальнее, с чем я много раз сталкивался.
1
паха76
12.02.2014, 20:31
  #15

Не по теме:


эх, про jnz многие забыли. Отсюда и Convert.ToBoolean(flag[i])
ООП хорошо, но основы алгоритмизации забывать - "фу так делать!"

0
pycture
12.02.2014, 20:59
  #16

Не по теме:

Цитата Сообщение от паха76 Посмотреть сообщение
эх, про jnz многие забыли
многие просто не знают

0
26 / 26 / 3
Регистрация: 10.04.2013
Сообщений: 167
12.02.2014, 22:36  [ТС] 17
Кто может, помогите доправить, не все получается , atoi и т.д
Не обращайте внимание на виндовс форм, я это хочу потом к простому интерфейсу подключить)
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        int i, j, n, p, xn, xk;
        int[] flag = new int[11];
        int[] l = new int[11];
        int[,] c =new int[11,11];
        char[] s= new char[80];
        char[,] path = new char[80,11];
        int min(int n)
        {
            int i, result=0;
            for (i = 0; i < n; i++)
                if (flag[i]==0) result = i;
            for (i = 0; i < n; i++)
                if ((l[result] > l[i]) && (flag[i]==0)) result = i;
            return result;
        }
        int minim(int x, int y)
        {
            if (x < y) return x;
            return y;
        }
 
 
        void main()
        {
            Console.WriteLine("Counte dots:");
            n = Console.Read();
           
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++) c[i,j] = 0;
            for (i = 0; i < n; i++)
                for (j = i + 1; j < n; j++)
                {
                    Console.Write(" Weight of edge  x" + (i + 1) + " do x" + (j + 1) + ": ");
                    c[i, j] = Console.Read();
                   
                }
            Console.Write(" ");
 
            for (i = 0; i < n; i++)
                Console.Write(" X" + (i + 1)+"\n\n");
              
           
            for (i = 0; i < n; i++)
            {
                Console.Write("x" + (i + 1));
                 
                for (j = 0; j < n; j++)
                {
                    Console.Write(c[i, j] + "  ");
                    
                    c[j,i] = c[i,j];
                }
                Console.Write("\n\n");
                
            }
            for (i = 0; i < n; i++)
                for (j = 0; j < n; j++)
                    if (c[i,j] == 0) c[i,j] = 65535; //nekonecno
            Console.Write(" Start: ");
            xn = Console.Read();
            Console.Write(" Finish: ");
            xk = Console.Read();
            xk--;
            xn--;
            if (xn == xk)
            {
                Console.Write("error, start and end dots cannot be simple.\n");
 
                Console.ReadKey(true);
                return;
            }
 
            for (i = 0; i < n; i++)
            {
                flag[i] = 0;
                l[i] = 65535;
            }
            l[xn] = 0;
            flag[xn] = 1;
            p = xn;
            s = Convert.ToString(xn + 1);
            
            for (i = 1; i <= n; i++)
            {
                 
                strcpy(path[i], "X");
                strcat(path[i], s);
            }
            do
            {
                for (i = 0; i < n; i++)
                    if ((c[p][i] != 65535) && (flag[i]==0) && (i != p))
                    {
                        if (l[i] > l[p] + c[p][i])
                        {
                            itoa(i + 1, s, 10);
                            strcpy(path[i + 1], path[p + 1]);
                            strcat(path[i + 1], "-X");
                            strcat(path[i + 1], s);
                        }
                        l[i] = minim(l[i], l[p] + c[p][i]);
                    }
                p = min(n);
                flag[p] = 1;
            } while (p != xk);
            if (l[p] != 65535)
            {
                
                cout << "Put: " << path[p + 1] << endl;
                cout << "Dlina puti: " << l[p] << endl;
            }
            else
                cout << "Путь не существует!" << endl;
            Console.readKey(True);
        }
    
 
    }
}
0
12.02.2014, 22:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2014, 22:36
Помогаю со студенческими работами здесь

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

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

Алгоритм Дейкстра
Помогите, люди добрые, пожалуйста с реализацией алгоритма Дейкстра, мож где есть хорошее объяснение...

Алгоритм Дейкстра
Здравствуйте! Помогите пожалуйста!! У меня в программе есть такое: //Вывод результата ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru