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

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

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

есть программа на языке Pascal, реализующий алгоритм Дейкстры, которую нужно переделать под С# Половину передалал, но затрял на тому, что переменная "w" не присвоенно значеннию. помогите исправить ошибку, и, если не трудно доделать ее.Буду благодарен за помощь)) вот код на Pascale:
Листинг программы
  1. Program Dijkstra;
  2. Uses Crt;
  3. Label 1,2,3;
  4. Var
  5. n,i,j,m,a_0,a_n,sum,k,min,ind,w,v_:Integer;
  6. S,D,P,V:Array[1..10]of Integer;
  7. C:Array[1..10,1..10]of Integer;
  8. SIM:Array[1..10,1..20] Of Char;
  9. prom:Char;
  10. simbol:String;
  11. cifra:Integer;
  12. Function v_s(ind:Integer):Boolean;
  13. Var i : Integer;
  14. Begin
  15. v_s := False;
  16. For i:=1 To n Do
  17. If (s[i]=ind) Then
  18. v_s:= True;
  19. End;
  20. Begin
  21. ClrScr;
  22. Write('Введите количество a/п : ');
  23. Readln (n);
  24. Write('Введите количество авиалиний : ');
  25. Readln(m);
  26. Writeln('');
  27. Write('V={');
  28. For i:=1 To n Do
  29. Begin
  30. V[i]:=i;
  31. If (i<>n) Then
  32. Write(V[i],',')
  33. Else
  34. Write(V[i],'}');
  35. End;
  36. sum:=0;
  37. C[1,2] := 10; C[1,4] := 30; C[1,5] := 100;
  38. C[2,3] := 50;
  39. C[3,1] := 70; C[3,5] := 10;
  40. C[4,3] := 20;
  41. C[5,4] := 60;
  42. Writeln('');
  43. For i:=1 To n Do
  44. For j:=1 To n Do
  45. Begin
  46. Write('Введите номер а\п отправления : ');
  47. Readln(a_0);
  48. Write(''Введите номер а\п назначения : ');
  49. Readln(a_n);
  50. Write('Введите время полёта по авиалинии : ');
  51. Readln(C[a_0,a_n]);}
  52. If (C[i,j] <> 0) Then
  53. sum:=sum+C[i,j];
  54. writeln;
  55. End;
  56. For i:=1 To n Do
  57. Begin
  58. If (Round(n/2)=i) Then
  59. Write ('C=')
  60. Else
  61. Write(' ');
  62. For j:=1 To n Do
  63. Begin
  64. If (C[i,j]=0) Then
  65. Begin
  66. C[i,j]:=sum;
  67. Write(' ~',' ');
  68. End
  69. Else
  70. Write(C[i,j],' ');
  71. End;
  72. Writeln(' ');
  73. End;
  74. S[1]:=1;
  75. For i:=1 To n Do
  76. V[i]:=V[i+1];
  77. For i:=2 To n Do
  78. Begin
  79. P[i]:=1;
  80. D[i]:=C[1,i];
  81. End;
  82. For k:=1 To (n-1) Do
  83. Begin
  84. min:=sum;
  85. For i:=2 To n Do
  86. If ((D[i]<=min)And(Not(v_s(i)))) Then
  87. Begin
  88. min:=D[i];
  89. w:=i;
  90. End;
  91. For i:=1 To n Do
  92. If (S[i]=0) Then
  93. Begin
  94. S[i]:=w;
  95. Goto 1;
  96. End;
  97. 1: For i:=1 To n Do
  98. If (V[i]=w) Then
  99. Begin
  100. For j:=i To n Do
  101. V[j]:=V[j+1];
  102. Goto 2;
  103. End;
  104. 2: i:=1;
  105. v_:=V[i];
  106. While (v_<>0) Do
  107. Begin
  108. If (D[v_] > (D[w]+C[w,v_])) Then
  109. Begin
  110. D[v_]:=D[w]+C[w,v_];
  111. P[v_]:=w;
  112. End;
  113. i:=i+1;
  114. v_:=V[i];
  115. End;
  116. End;
  117. writeln;
  118. Write ('D={');
  119. For i:=2 To n Do
  120. If (i<>n) Then
  121. Write(D[i],',')
  122. Else
  123. Write (D[i],'}');
  124. writeln;
  125. Write('P={');
  126. For i:=2 To n Do
  127. If (i<>n) Then
  128. Write (P[i],',')
  129. Else
  130. Write (P[i],'}');
  131. For i:=2 To n Do
  132. Begin
  133. j:=1;
  134. Str(i,simbol);
  135. SIM[i,j]:=simbol[1];
  136. 3:If (j=1) Then
  137. Begin
  138. Str(P[i],simbol);
  139. prom:=simbol[1];
  140. End
  141. Else
  142. Begin
  143. Val(prom,cifra,cifra);
  144. Str(P[cifra],simbol);
  145. prom:=simbol[1];
  146. End;
  147. j:=j+1; SIM[i,j]:='>'; j:=j+1; SIM[i,j]:='-'; j:=j+1;
  148. SIM[i,j]:=prom;
  149. If (prom<>'1') Then
  150. Goto 3;
  151. End;
  152. Writeln(' ');
  153. For i:=2 to n Do
  154. Begin
  155. Writeln('');
  156. For j:=20 downto 1 Do
  157. Write(SIM[i,j]);
  158. Write(' = ',D[i]);
  159. End;
  160. readln;
  161. End. {Dijkstra}
Мой код на C#:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Metod_Dijkstra
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. int n, i, j, m, a_0, a_n, sum, k, min, ind, w, v_;
  12. int[] V = new int[10];
  13. int[] S=new int[10];
  14. int[] D=new int[10];
  15. int[] P=new int[10];
  16. int[,] C = new int[10, 10];
  17. char[,] SIM = new char[10, 20];
  18. char prom;
  19. string simbol;
  20. int cifra;
  21. Console.Write("Введите количество а/п : ");
  22. n = int.Parse(Console.ReadLine());
  23. Console.Write("Введите количество авиалиний : ");
  24. m = int.Parse(Console.ReadLine());
  25. Console.Write("V={");
  26. for (i = 1; i <= n; i++)
  27. {
  28. V[i] = i;
  29. if (i != n)
  30. {
  31. Console.Write(V[i]);
  32. Console.Write(",");
  33. }
  34. else
  35. {
  36. Console.Write(V[i]);
  37. Console.WriteLine("}");
  38. }
  39. }
  40. sum = 0;
  41. C[1, 2] = 10; C[1, 3] = 30; C[1, 4] = 100;
  42. C[2, 1] = 10; C[2, 4] = 80; C[2, 5] = 50;
  43. C[3, 4] = 40; C[3, 6] = 10;
  44. C[4, 6] = 60;
  45. C[5, 3] = 70;
  46. C[6, 5] = 20;
  47. for (i = 1; i <= n; i++)
  48. {
  49. for (j = 1; j <= n; j++)
  50. {
  51. Console.Write("Введите номер аП отправления : ");
  52. a_0 = int.Parse(Console.ReadLine());
  53. Console.Write("Введите номер ап назначения : ");
  54. a_n = int.Parse(Console.ReadLine());
  55. Console.Write("Введите время полета по авиалинии: ");
  56. C[a_0, a_n] = int.Parse(Console.ReadLine());
  57. if (C[i, j] != 0)
  58. {
  59. sum = sum + C[i, j];
  60. Console.WriteLine();
  61. }
  62. }
  63. }
  64. for (i = 1; i <= n; i++)
  65. {
  66. if (n / 2 == i)
  67. Console.Write("C=");
  68. else
  69. Console.Write(" ");
  70. for (j = 1; j <= n; j++)
  71. {
  72. if (C[i, j] == 0)
  73. {
  74. C[i, j] = sum;
  75. Console.Write("~");
  76. Console.Write(" ");
  77. }
  78. else
  79. {
  80. Console.Write(C[i, j]);
  81. Console.Write(" ");
  82. }
  83. }
  84. Console.Write(" ");
  85. }
  86. S[1] = 1;
  87. for (i = 1; i <= n; i++)
  88. V[i] = V[i + 1];
  89. for (i = 2; i <= n; i++)
  90. {
  91. P[i] = 1;
  92. D[i] = C[1, i];
  93. }
  94. for (k = 1; k <= n - 1; k++)
  95. {
  96. min = sum;
  97. for (i = 2; i <= n; i++)
  98. {
  99. if (D[i] <= min)
  100. {
  101. min = D[i];
  102. w = i;
  103. }
  104. }
  105. for (i = 1; i <= n; i++)
  106. if (S[i] == 0)
  107. {
  108. S[i] = w;//ошибка "переменной w не присвоенно значеннию";
  109. goto one;
  110. }
  111. }
  112. one:
  113. for (i = 1; i <= n; i++)
  114. {
  115. if (V[i] == w)
  116. {
  117. for (j = 1; j <= n; j++)
  118. {
  119. V[i] = V[j + 1];
  120. goto two;
  121. }
  122. }
  123. }
  124. two:
  125. i = 1;
  126. v_ = V[i];
  127. }
  128. }
  129. }
  130. }

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

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

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


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

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

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы