Алгоритм Дейкстры, перевод с Pascal - C#

Узнай цену своей работы

Формулировка задачи:

есть программа на языке Pascal, реализующий алгоритм Дейкстры, которую нужно переделать под С# Половину передалал, но затрял на тому, что переменная "w" не присвоенно значеннию. помогите исправить ошибку, и, если не трудно доделать ее.Буду благодарен за помощь)) вот код на Pascale:
Program Dijkstra;
Uses Crt;
Label 1,2,3;
Var
n,i,j,m,a_0,a_n,sum,k,min,ind,w,v_:Integer;
S,D,P,V:Array[1..10]of Integer;
C:Array[1..10,1..10]of Integer;
SIM:Array[1..10,1..20] Of Char;
prom:Char;
simbol:String;
cifra:Integer;
Function v_s(ind:Integer):Boolean;
Var i : Integer;
Begin
v_s := False;
For i:=1 To n Do
If (s[i]=ind) Then
v_s:= True;
End;
Begin
ClrScr;
Write('Введите количество a/п : ');
Readln (n);
Write('Введите количество авиалиний : ');
Readln(m);
Writeln('');
Write('V={');
For i:=1 To n Do
Begin
V[i]:=i;
If (i<>n) Then
Write(V[i],',')
Else
Write(V[i],'}');
End;
sum:=0;
C[1,2] := 10; C[1,4] := 30; C[1,5] := 100;
C[2,3] := 50;
C[3,1] := 70; C[3,5] := 10;
C[4,3] := 20;
C[5,4] := 60;
Writeln('');
For i:=1 To n Do
For j:=1 To n Do
Begin
Write('Введите номер а\п отправления : ');
Readln(a_0);
Write(''Введите номер а\п назначения : ');
Readln(a_n);
Write('Введите время полёта по авиалинии : ');
Readln(C[a_0,a_n]);}
If (C[i,j] <> 0) Then
sum:=sum+C[i,j];
writeln;
End;
For i:=1 To n Do
Begin
If (Round(n/2)=i) Then
Write ('C=')
Else
Write(' ');
For j:=1 To n Do
Begin
If (C[i,j]=0) Then
Begin
C[i,j]:=sum;
Write(' ~',' ');
End
Else
Write(C[i,j],' ');
End;
Writeln(' ');
End;
S[1]:=1;
For i:=1 To n Do
V[i]:=V[i+1];
For i:=2 To n Do
Begin
P[i]:=1;
D[i]:=C[1,i];
End;
For k:=1 To (n-1) Do
Begin
min:=sum;
For i:=2 To n Do
If ((D[i]<=min)And(Not(v_s(i)))) Then
Begin
min:=D[i];
w:=i;
End;
For i:=1 To n Do
If (S[i]=0) Then
Begin
S[i]:=w;
Goto 1;
End;
1: For i:=1 To n Do
If (V[i]=w) Then
Begin
For j:=i To n Do
V[j]:=V[j+1];
Goto 2;
End;
2: i:=1;
v_:=V[i];
While (v_<>0) Do
Begin
If (D[v_] > (D[w]+C[w,v_])) Then
Begin
D[v_]:=D[w]+C[w,v_];
P[v_]:=w;
End;
i:=i+1;
v_:=V[i];
End;
End;
writeln;
Write ('D={');
For i:=2 To n Do
If (i<>n) Then
Write(D[i],',')
Else
Write (D[i],'}');
writeln;
Write('P={');
For i:=2 To n Do
If (i<>n) Then
Write (P[i],',')
Else
Write (P[i],'}');
For i:=2 To n Do
Begin
j:=1;
Str(i,simbol);
SIM[i,j]:=simbol[1];
3:If (j=1) Then
Begin
Str(P[i],simbol);
prom:=simbol[1];
End
Else
Begin
Val(prom,cifra,cifra);
Str(P[cifra],simbol);
prom:=simbol[1];
End;
j:=j+1; SIM[i,j]:='>'; j:=j+1; SIM[i,j]:='-'; j:=j+1;
SIM[i,j]:=prom;
If (prom<>'1') Then
Goto 3;
End;
Writeln(' ');
For i:=2 to n Do
Begin
Writeln('');
For j:=20 downto 1 Do
Write(SIM[i,j]);
Write(' = ',D[i]);
End;
readln;
End. {Dijkstra}
Мой код на C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Metod_Dijkstra
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int n, i, j, m, a_0, a_n, sum, k, min, ind, w, v_;
            int[] V = new int[10];
            int[] S=new int[10];
            int[] D=new int[10];
            int[] P=new int[10];
            int[,] C = new int[10, 10];
            char[,] SIM = new char[10, 20];
            char prom;
            string simbol;
            int cifra;
 
            Console.Write("Введите количество а/п : ");
            n = int.Parse(Console.ReadLine());
            Console.Write("Введите количество авиалиний : ");
            m = int.Parse(Console.ReadLine());
            Console.Write("V={");
            for (i = 1; i <= n; i++)
            {
                V[i] = i;
                if (i != n)
                {
                    Console.Write(V[i]);
                    Console.Write(",");
                }
                else
                {
                    Console.Write(V[i]);
                    Console.WriteLine("}");
                }
            }
            sum = 0;
            C[1, 2] = 10; C[1, 3] = 30; C[1, 4] = 100;
            C[2, 1] = 10; C[2, 4] = 80; C[2, 5] = 50;
            C[3, 4] = 40; C[3, 6] = 10;
            C[4, 6] = 60;
            C[5, 3] = 70;
            C[6, 5] = 20;
            for (i = 1; i <= n; i++)
            {
                for (j = 1; j <= n; j++)
                {
 
                    Console.Write("Введите номер аП отправления : ");
                    a_0 = int.Parse(Console.ReadLine());
                    Console.Write("Введите номер ап назначения : ");
                    a_n = int.Parse(Console.ReadLine());
                    Console.Write("Введите время полета по авиалинии: ");
                    C[a_0, a_n] = int.Parse(Console.ReadLine());
                    if (C[i, j] != 0)
                    {
                        sum = sum + C[i, j];
                        Console.WriteLine();
                    }
 
                }
            }
 
            for (i = 1; i <= n; i++)
            {
                if (n / 2 == i)
                    Console.Write("C=");
                else
                    Console.Write(" ");
                for (j = 1; j <= n; j++)
                {
                    if (C[i, j] == 0)
                    {
                        C[i, j] = sum;
                        Console.Write("~");
                        Console.Write(" ");
                    }
                    else
                    {
                        Console.Write(C[i, j]);
                        Console.Write(" ");
                    }
                }
                Console.Write(" ");
         
            }
           S[1] = 1;
           for (i = 1; i <= n; i++)
               V[i] = V[i + 1];
           for (i = 2; i <= n; i++)
           {
               P[i] = 1;
               D[i] = C[1, i];
           }
           for (k = 1; k <= n - 1; k++)
           {
               min = sum;
               for (i = 2; i <= n; i++)
               {
                   if (D[i] <= min)
                   {
                       min = D[i];
                       w = i;
                   }
               }
               for (i = 1; i <= n; i++)
               
                   if (S[i] == 0)
                   {
                       S[i] = w;//ошибка "переменной w не присвоенно значеннию";
                       goto one;
                   }
               }
           one:
               for (i = 1; i <= n; i++)
               {
                   if (V[i] == w)
                   {
                       for (j = 1; j <= n; j++)
                       {
                           V[i] = V[j + 1];
                           goto two;
                       }
                   }
               }
           two:
               i = 1;
           v_ = V[i];
           }      
        }
    }
}

Решение задачи: «Алгоритм Дейкстры, перевод с Pascal»

textual
Листинг программы
Function v_s(ind:Integer):Boolean;
Var i : Integer;
Begin
v_s := False;
For i:=1 To n Do
If (s[i]=ind) Then
v_s:= True;
End;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы