Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2014, 17:33   #1
NastyaShuvalova
Пользователь
 
Регистрация: 16.12.2013
Сообщений: 21
Восклицание Алгоритм Дейкстры C#

В приведенном ниже все заработало кроме того, что надо отображать сам путь, то есть по каким вершинам он проходит. Огромная просьба, скажите мне в чем ошибка
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class Program
    {
        static int i, j, n, p, xn, xk;
        static bool[] flag = new bool[11];
        static uint[,] c = new uint[11, 11];
        static uint[] l = new uint[11];
        //static string s = new string(new char[80]);
        //static sbyte[,] path = new sbyte[11,80];
        static int min(int n)
        {
            int i, result=0;
            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;
        }
        static uint minim(uint x, uint y)
        {
            if (x < y) return x;
            return y;
        }
        static void Main(string[] args)
        {
            string s="";
            string path="";
            Console.Write("Напишите число точек: ");
 
 
            n = Convert.ToInt32(Console.ReadLine());
           
            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(" задайте длины рёбер  x");
                    Console.Write(i + 1);
                    Console.Write(" do x");
                    Console.Write(j + 1);
                    Console.Write(": ");
                    c[i, j] = Convert.ToUInt32(Console.ReadLine());
 
                }
            Console.Write("   ");
            for (i = 0; i < n; i++)
            {Console.Write("    X");
            Console.Write(i + 1);
        }
        Console.Write("\n");
        Console.Write("\n");
 
            for (i = 0; i < n; i++)
            {
                Console.Write("X{0:D}", i + 1);
 
                for (j = 0; j < n; j++)
                {
                    Console.Write("{0,6:D}", 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(" задайте начальную точку: ");
            xn = Convert.ToInt32(Console.ReadLine());
            path = Convert.ToString(xn+" ");
            Console.Write(" задайте конечную точку: ");
            xk = Convert.ToInt32(Console.ReadLine());
            int rem = xk;
            xk--;
            xn--;
            if (xn == xk)
            {
               
                Console.WriteLine("Начальная и конечные точки совпадают");
                Console.ReadLine();
                return;
            }
 
            for (i = 0; i < n; i++)
            {
                flag[i] = false;
                l[i] = 65535;
            }
            l[xn] = 0;
            flag[xn] = true;
            p = xn;
            
            s = Convert.ToString(xn + 1);
            for (i = 1; i <= n; i++)
            {
                
                //path[i] = Convert.ToSByte("X");
             
                //path[i] +=Convert.ToSByte(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])
                        {
                           
                            s = Convert.ToString(i + 1);
                      
                            //path[i + 1,0] = path[p + 1,0];
                            //path[i + 1] += Convert.ToSByte("-X");
                    
                            //path[i + 1,0] += Convert.ToSByte(s);
                           
                        }
                        l[i] = minim(l[i], l[p] + c[p,i]);
                    }
                p = min(n);
                path += n;
                flag[p] = true;
            }
            while (p != xk);
          
            if (l[p] != 65535)
            {
                path += Convert.ToString(rem);
                Console.Write("Put: ");
                Console.Write(path);
                Console.Write("\n");
                Console.Write("Dlina puti: ");
                Console.Write(l[p]);
                Console.Write("\n");
 
            }
            else
                Console.Write("Путь не существует!");
            Console.Write("\n");
 
            Console.ReadLine();
 
 
 
        }
    }
}


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.03.2014 в 10:04.
NastyaShuvalova вне форума Ответить с цитированием
Старый 17.11.2015, 19:37   #2
Шамуэль
Новичок
Джуниор
 
Регистрация: 17.11.2015
Сообщений: 4
Печаль Не очень понял

Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)

у меня visual studio, не могу найти эту кнопочку...

Подскажите пожалуйста более подробнее, что нужно добавить чтобы узнать по каким маршрутам выполняется путь?
Шамуэль вне форума Ответить с цитированием
Старый 17.11.2015, 19:46   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Она не в Visual Studio


В чем ошибка-то проявляется?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.11.2015, 20:27   #4
Шамуэль
Новичок
Джуниор
 
Регистрация: 17.11.2015
Сообщений: 4
По умолчанию не отображается путь от одной точки до другой

Например, ввожу расстояние, между x1-x2, x1-x3 итд, после чего жму найти расстояние от 1 точки до 2, расстояние выводит, а сам путь от точки до второй точки неверный... я загрузил картинку своей проблемы, хотел бы узнать почему путь, 55554, вместо того чтобы получить 2154
Изображения
Тип файла: jpg пример дейкстры и кода.jpg (89.5 Кб, 187 просмотров)
Тип файла: jpg Решение Алгоритм Дейкстры.jpg (68.6 Кб, 365 просмотров)
Шамуэль вне форума Ответить с цитированием
Старый 18.11.2015, 11:15   #5
Шамуэль
Новичок
Джуниор
 
Регистрация: 17.11.2015
Сообщений: 4
Вопрос Кто ни будь поможет с вопросом ?

Кто ни будь поможет с вопросом ?
Шамуэль вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Дейкстры (С++) DemonScorpion Помощь студентам 4 18.11.2015 18:41
С. Алгоритм Дейкстры XeniaZharinova Помощь студентам 0 26.12.2013 12:36
Алгоритм Дейкстры Kharass Помощь студентам 3 03.03.2013 16:38
Алгоритм Дейкстры FantaC Общие вопросы C/C++ 0 24.02.2012 12:04
Алгоритм Дейкстры andis Помощь студентам 0 24.01.2010 17:42