Метод Беллмана-Форда(Перевод кода из C в C#)
Формулировка задачи:
Добрый день. Хочу попросить помочь решить возникшую проблему с переводом кода из C в C#.
Отсутствует 2 этапа, вывод на консоль и ввод данных с файла.
Исходный код
:#include <stdio.h> typedef struct { int u, v, w; } Edge; int n; /* the number of nodes */ int e; /* the number of edges */ Edge edges[1024]; /* large enough for n <= 2^5=32 */ int d[32]; /* d[i] is the minimum distance from node s to node i */ #define INFINITY 10000 void printDist() { int i; printf("Distances:\n"); for (i = 0; i < n; ++i) printf("to %d\t", i + 1); printf("\n"); for (i = 0; i < n; ++i) printf("%d\t", d[i]); printf("\n\n"); } void bellman_ford(int s) { int i, j; for (i = 0; i < n; ++i) d[i] = INFINITY; d[s] = 0; for (i = 0; i < n - 1; ++i) for (j = 0; j < e; ++j) if (d[edges[j].u] + edges[j].w < d[edges[j].v]) d[edges[j].v] = d[edges[j].u] + edges[j].w; } int main(int argc, char *argv[]) { int i, j; int w; FILE *fin = fopen("dist.txt", "r"); fscanf(fin, "%d", &n); e = 0; for (i = 0; i < n; ++i) for (j = 0; j < n; ++j) { fscanf(fin, "%d", &w); if (w != 0) { edges[e].u = i; edges[e].v = j; edges[e].w = w; ++e; } } fclose(fin); /* printDist(); */ bellman_ford(0); printDist(); return 0; }
То, что смог сам перевести:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { public class Edge { public int FirstNode; public int SecondNode; public int lenght; public void Rebro(int u, int v, int w) { this.FirstNode = u; this.SecondNode = v; lenght = w; } } class Program { public Edge[] rebra { get; private set; } int n; int e; Edge[] edges = new Edge[1024]; int[] d = new int[32]; public void BellmanFord(int StartVertex) { const int BigNum = 10000; int i = 0; int j = 0; for (i = 0; i < n; ++i) { d[i] = BigNum; } d[StartVertex] = 0; for (i = 0; i < n - 1; ++i) for (j = 0; j < e; ++j) if (d[rebra[j].FirstNode] + rebra[j].lenght < d[rebra[j].SecondNode]) d[rebra[j].SecondNode] = d[rebra[j].FirstNode] + rebra[j].lenght; } static void Main(string[] args) { int i, j; int w; } } }
30+ просмотров и не одного ответа. Неужели так сложно?(
Решение задачи: «Метод Беллмана-Форда(Перевод кода из C в C#)»
textual
Листинг программы
int[,] matrix; using (FileStream file = new FileStream(@"D:\file.bin", FileMode.Open, FileAccess.Read)) { byte[] data = new byte[4]; file.Read(data, 0, 4); int size = BitConverter.ToInt32(data, 0); data = new byte[4 * size * size]; matrix = new int[size, size]; file.Read(data, 0, 4 * size * size); for (int i = 0; i < size; i++) for (int j = 0; j < size; j++) { matrix[i, j] = BitConverter.ToInt32(data, i * 4 + j * size * 4); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д