Метод Беллмана-Форда(Перевод кода из C в C#)

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

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

Добрый день. Хочу попросить помочь решить возникшую проблему с переводом кода из C в C#.

Исходный код

:
#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;  
        }
    }
}
Отсутствует 2 этапа, вывод на консоль и ввод данных с файла.
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);
                    }
            }

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


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

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

15   голосов , оценка 4.067 из 5