Перевести код Pascal на C#
Формулировка задачи:
Проблема в том, что при переводе на C# появляется элемент недостижимого кода. Помогите пожалуйста.
Вот Pascal
Вот C#
Пример:
Вход
7
3 4 2 2 1 4 1
Выход
9
var
a : array[1..20] of integer;
lab : array[1..20] of boolean;
min,k,n,d : longint;
procedure dfs(w:integer);
var
i,j,d1 : longint;
k1 : array[1..3] of integer;
begin
k1[1]:=w;j:=0;
for i:=1 to n do
if not lab[i] then
inc(j);
if j<3 then
begin
if d<min then min:=d;
exit;
end;
if w=n then
begin
k1[2]:=1;
k1[3]:=2;
end;
if w=n-1 then
begin
k1[2]:=n;
k1[3]:=1;
end
else
begin
k1[2]:=w+1;
k1[3]:=w+2;
end;
if (not lab[k1[1]]) and (not lab[k1[2]]) and (not lab[k1[3]]) then
begin
d1:=0;
for i:=1 to 3 do
lab[k1[i]]:=true;
for i:=1 to n do
if not lab[i] then d1:=d1+a[i];
d:=d+d1;
if w<n then i:=w+1 else i:=1;
while true do
begin
if w=i then
begin
if d<min then min:=d;
exit;
end;
if not lab[i] then dfs(i);
if i<n then inc(i) else i:=1;
end;
d:=d-d1;
for i:=1 to 3 do
lab[k1[i]]:=false;
end;
end;
begin
min:=maxlongint;
readln(n);
for k:=1 to n do read(a[k]);
for k:=1 to n do
begin
d:=0;
fillchar(lab,sizeof(lab),False);
dfs(k);
end;
writeln(min);
end.using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _1152
{
class Program
{
static bool[] lab = new bool[30];
static int i;
static int min, k, n, d;
static int [] a = new int[30];
static void Main(string[] args)
{
//int [] a = new int[30];
min = 100000000;
n = int.Parse(Console.ReadLine());
for (k = 1; k <= n; k++)
a[k] = int.Parse(Console.ReadLine());
for (k = 0; k < n; k++)
{
d = 0;
//for (i = 1; i <= 21; i++)
// lab[i] = false;
dfs(k);
}
Console.WriteLine(min);
Console.ReadKey();
}
public static void dfs(int w)
{
int i, j, d1;
int [] k1 = new int [3];
k1[0] = w;
j = 0;
for(i = 0; i < n; i++)
if (!lab[i]) j++;
if (j < 3)
{
if (d < min) min=d;
Console.WriteLine(0);
Console.ReadKey();
//Environment.Exit(1);
}
if (w == n)
{
k1[1] = 1;
k1[2] = 2;
}
if (w == n - 1)
{
k1[1] = n;
k1[2] = 1;
}
else
{
k1[1] = w + 1;
k1[2] = w + 2;
}
if ((!lab[k1[0]]) && (!lab[k1[1]]) && (!lab[k1[2]]))
{
d1 = 0;
for(i = 0; i < 3; i++)
lab[k1[i]] = true;
for(i = 0; i < n; i++)
if (!lab[i]) d1 = d1 + a[i];
d = d + d1;
if (w < n) i = w + 1;
else i = 1;
while (true)
{
if (w == i)
{
if (d < min) min = d;
Console.WriteLine(0);
Console.ReadKey();
//Environment.Exit(1);
}
if (!lab[i]) dfs(i);
if (i < n) i++;
else i = 1;
}
d = d - d1; // вот здесь код недостижим
for(i = 0; i < 3; i++)
lab[k1[i]] = false;
}
}
}
}Решение задачи: «Перевести код Pascal на C#»
textual
Листинг программы
break