Home
Асташин Иван Александрович editou esta página 1 ano atrás

Минимальные потери

using System; using System.ComponentModel;

namespace MyApp // Note: actual namespace depends on the project name. {

internal class Program
{
    static void Reading(string path, string path1, string path2)
    {
        int k = 0;
        int g = 0;
        int h = 0;
        int l = 0;
        using (StreamReader sr = new StreamReader(path))
        {

            while (sr.EndOfStream != true)
            {
                string[] array = sr.ReadLine().Split(";");
                k++;
                g = array.Length;
            }
        }
        int[,] arr = new int[k, g];
        using (StreamReader sr = new StreamReader(path))
        {
            for (int i = 0; i < k; i++)
            {
                string[] array = sr.ReadLine().Split(";");
                for (int j = 0; j < g; j++)
                {
                    arr[i, j] = Convert.ToInt32(array[j]);
                }
            }

        }
        using (StreamReader sr = new StreamReader(path1))
        {
            while(sr.EndOfStream!=true)
            {
                string[] array = sr.ReadLine().Split(";");
                h = array.Length;
            }
        }
        using (StreamReader sr = new StreamReader(path2))
        {
            while (sr.EndOfStream != true)
            {
                string[] array = sr.ReadLine().Split(";");
                l = array.Length;
            }
        }
        int[] post = new int[h];
        int[] potr = new int[l];
        using (StreamReader sr = new StreamReader(path1))
        {
            while (sr.EndOfStream != true)
            {
                string[] array = sr.ReadLine().Split(";");
                for (int i = 0; i < h; i++)
                {
                    post[i] = Convert.ToInt32(array[i]);
                }
            }
        }
        using (StreamReader sr = new StreamReader(path2))
        {
            while (sr.EndOfStream != true)
            {
                string[] array = sr.ReadLine().Split(";");
                for (int i = 0; i < l; i++)
                {
                    potr[i] = Convert.ToInt32(array[i]);
                }
            }
        }
        Process(arr, k, g, post, potr, h, l);

    }
    static void Process(int[,] arr, int n, int m, int[] post, int[] potr, int v, int x)
    {
        int sum1 = 0;
        int sum2 = 0;
        Console.WriteLine("Исходная матрица: ");
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                Console.Write(arr[i, j] + " ");
            }
            Console.WriteLine();
        }
        //Первый массив
        Console.WriteLine("");
        Console.WriteLine("Поставки: ");
        Console.WriteLine("");
        for (int i = 0; i < v; i++)
        {
            Console.Write("{0} ", post[i]);
        }
        Console.WriteLine("");
        Console.WriteLine("Потребление: ");
        //Второй массив
        Console.WriteLine(" ");
        for (int i = 0; i < x; i++)
        {
            Console.Write("{0} ", potr[i]);
        }
        Console.WriteLine("");
        //Проверка суммы
        if (sum1 == sum2)
        {
            Console.WriteLine("\nСуммы спроса и предложения совпадают");
        }
        else
        {
            Console.WriteLine("\nСуммы спроса и предложения не совпадают, задача не решаема");
            return;
        }
        int max = arr[0, 0];
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                if (arr[i, j] > max)
                {
                    max = arr[i, j];
                }
            }
        }
        int k = 0;
        int f = 0;
        int[,] nm = new int[n, m];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                nm[i, j] = 0;
        while (k <= max)
        {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                    if(k == arr[i, j])
                    {
                if (post[i] > potr[j])
                {
                    nm[i, j] = potr[j];
                    post[i] -= potr[j];
                    potr[j] -= potr[j];
                }
                else if (post[i] < potr[j])
                {
                    nm[i, j] = post[i];
                    potr[j] -= post[i];
                    post[i] -= post[i];
                }
                else if (post[i] == potr[j])
                {
                    nm[i, j] = post[i];
                    post[i] -= post[i];
                    potr[j] -= potr[j];
                }
                    }
                    f = nm[i, j] * arr[i, j] + f;
            }
        }
            k++;
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                Console.Write("{0}\t", nm[i, j]);
            }
            Console.WriteLine();
        }
        Console.WriteLine("");
        Console.Write("Общая сумма - " + f);
    }
    static void Main(string[] args)
    {
        string path = "matrix.csv";
        string path1 = "post.csv";
        string path2 = "potr.csv";
        Reading(path, path1, path2);

    }
}

}

Северо-Западный

using System; namespace MyApp // Note: actual namespace depends on the project name. {

internal class Program
{
    static void Main(string[] args)
    {
        //Матрица
        int sum1 = 0;
        int sum2 = 0;
        Console.WriteLine("Введите размерность массива по строкам:");
        int n = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Введите размерность массива по столбцам:");
        int m = Convert.ToInt32(Console.ReadLine());
        int[,] rp = new int[n, m];
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                Console.WriteLine("Введите " + '[' + i + ", " + j + ']' + " элемент: ");
                rp[i, j] = Convert.ToInt32(Console.ReadLine());
            }
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                Console.Write("{0}\t", rp[i, j]);
            }
            Console.WriteLine();
        }

        //Первый массив
        Console.WriteLine(" ");
        int v = n;
        int[] M = new int[v];
        for (int i = 0; i < v; i++)
        {
            Console.WriteLine("Введите " + '[' + i + ']' + " элемент: ");
            M[i] = Convert.ToInt32(Console.ReadLine());
            sum1 = sum1 + M[i];
        }
        Console.WriteLine("");
        for (int i = 0; i < v; i++)
        {
            Console.Write("{0} ", M[i]);
        }

        //Второй массив
        Console.WriteLine("\n");
        int x = m;
        int[] N = new int[x];
        for (int i = 0; i < x; i++)
        {
            Console.WriteLine("Введите " + '[' + i + ']' + " элемент: ");
            N[i] = Convert.ToInt32(Console.ReadLine());
            sum2 = sum2 + N[i];
        }
        Console.WriteLine(" ");
        for (int i = 0; i < x; i++)
        {
            Console.Write("{0} ", N[i]);
        }
        Console.WriteLine("");
        //Проверка суммы
        if (sum1 == sum2)
        {
            Console.WriteLine("\nСуммы спроса и предложения совпадают");
        }
        else
        {
            Console.WriteLine("\nСуммы спроса и предложения не совпадают, задача не решаема");
            return;
        }
        int f = 0;
        int[,] nm = new int[n, m];
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                nm[i, j] = 0;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                if (M[i] > N[j])
                {
                    nm[i, j] = N[j];
                    M[i] -= N[j];
                    N[j] -= N[j];
                }
                else if (M[i] < N[j])
                {
                    nm[i, j] = M[i];
                    N[j] -= M[i];
                    M[i] -= M[i];
                }
                else if (M[i] == N[j])
                {
                    nm[i, j] = M[i];
                    M[i] -= M[i];
                    N[j] -= N[j];
                }
                f = nm[i, j] * rp[i, j] + f;
            }
        }
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
                Console.Write("{0}\t", nm[i, j]);
            }
            Console.WriteLine();
        }
        Console.WriteLine("");
        Console.Write("Общая сумма - " + f);
    }
}

} Метод Джонсона

using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace Djo {

internal class Program
{
    static void show(List<int> l)
    {
        for(int i = 0; i < l.Count; i+=2)
        {
            Console.WriteLine("{0,-2} {1}",l[i],l[i + 1]);
        }            
    }
    static void show(int[,] mas)
    {
        for(int i = 0; i < mas.GetLength(0); i++)
        {
            for(int j = 0; j < mas.GetLength(1); j++)
            {
                Console.Write(mas[i,j] + " ");
            }
            Console.WriteLine();
        }
    }    
    static void readFiles(List<string> startDate)
    {
        string[] file = File.ReadAllLines("Изначальное распределение.txt");
        for (int i = 0; i < file.Length; i++)
        {
            startDate.AddRange(file[i].Split(' '));
        }
    }
    static void twoListAboutMachine(List<string> startDate, List<int> OneMachine, List<int> TwoMachine)
    {
        string[,] startTable = new string[startDate.Count / 2, 2];
        for (int ind = 0, i = 0; ind < startDate.Count; ind += 2, i++)
        {
            startTable[i, 0] = startDate[ind];
            startTable[i, 1] = startDate[ind + 1];
            Console.WriteLine(startTable[i, 0] + " " + startTable[i, 1]);
        }
        while (true)
        {

            if (OneMachine.Count + TwoMachine.Count != startDate.Count)
            {
                for (int i = 0; i < startTable.GetLength(0); i++)
                {
                    if (Convert.ToInt32(startTable[i, 0]) < Convert.ToInt32(startTable[i, 1]))
                    {
                        OneMachine.Add(Convert.ToInt32(startTable[i, 0]));
                        OneMachine.Add(Convert.ToInt32(startTable[i, 1]));
                    }
                    else
                    {
                        TwoMachine.Add(Convert.ToInt32(startTable[i, 0]));
                        TwoMachine.Add(Convert.ToInt32(startTable[i, 1]));
                    }
                }
            }
            else
            {
                break;
            }
        }
    }
    static void convertListToInt(List<int> listmachine, int[,] masmaschine)
    {
        for (int i = 0, j=0; i < masmaschine.GetLength(0); i++,j++)
        {
            masmaschine[i, 0] = listmachine[j];
            j++;
            masmaschine[i, 1] = listmachine[j];                
        }
    }
    static void sortList(List<int> OneMachine, List<int> TwoMachine, int[,] finalyDate)
    {
        int[,] One = new int[OneMachine.Count / 2, 2];
        int[,] Two = new int[TwoMachine.Count / 2, 2];
        convertListToInt(OneMachine, One);
        convertListToInt(TwoMachine, Two);
        Console.WriteLine("SORTING");
        int indexe = 0;
        for (int i=0; i < One.GetLength(0); i++)
        {
            for (int j = i + 1; j < One.GetLength(0); j++)
            {
                if (One[i, 0] > One[j, 0])
                {
                    int temp = One[i, 0];
                    One[i, 0] = One[j , 0];
                    One[j , 0] = temp;
                    temp = One[i, 1];
                    One[i, 1] = One[j , 1];
                    One[j , 1] = temp;
                }
                else if (One[i, 0] == One[j , 0])
                {
                    if (One[i, 1] < One[j , 1])
                    {
                        int temp = One[i, 0];
                        One[i, 0] = One[j , 0];
                        One[j , 0] = temp;
                        temp = One[i, 1];
                        One[i, 1] = One[j , 1];
                        One[j , 1] = temp;
                    }
                }
            }
            File.AppendAllText("Финальное распределение.txt", $"{One[i, 0],-2} {One[i, 1]}");
            File.AppendAllText("Финальное распределение.txt", Environment.NewLine);
            Console.WriteLine("{0,-2} {1}", One[i, 0], One[i, 1]);
            finalyDate[indexe, 0] = One[i, 0];
            finalyDate[indexe, 1] = One[i, 1];
            indexe ++;
        }
        for (int i = 0; i < Two.GetLength(0); i++)
        {
            for (int j = i + 1; j < Two.GetLength(0); j++)
            {
                if (Two[i, 1] < Two[j , 1])
                {
                    int temp = Two[i, 0];
                    Two[i, 0] = Two[j , 0];
                    Two[j , 0] = temp;
                    temp = Two[i, 1];
                    Two[i, 1] = Two[j , 1];
                    Two[j , 1] = temp;
                }
                else if (Two[i, 1] == Two[j , 1])
                {
                    if (Two[i, 0] > Two[j , 0])
                    {
                        int temp = Two[i, 0];
                        Two[i, 0] = Two[j , 0];
                        Two[j , 0] = temp;
                        temp = Two[i, 1];
                        Two[i, 1] = Two[j , 1];
                        Two[j , 1] = temp;
                    }
                }
            }
            File.AppendAllText("Финальное распределение.txt", $"{Two[i, 0],-2} {Two[i, 1]}");
            File.AppendAllText("Финальное распределение.txt", Environment.NewLine);
            Console.WriteLine("{0,-2} {1}", Two[i, 0], Two[i, 1]);
            finalyDate[indexe, 0] = Two[i, 0];
            finalyDate[indexe, 1] = Two[i, 1];
            indexe++;
        } 
    }
    static void SearchOptimalTime(int[,] finalyDate, List<string> startDate)
    {
        int sum = finalyDate[0,0];
        int max = finalyDate[0, 0];
        for (int i = 1; i < finalyDate.GetLength(0); i++)
        {
            sum += finalyDate[i,0]-finalyDate[i-1,1];
            if (max < sum)
            {
                max = sum;
            }
        }
        Console.WriteLine("Время простоя при оптимальной перестановке: " + max);
        int[,] mas = new int[startDate.Count / 2, 2];
        for (int i = 0, j = 0; i < mas.GetLength(0); i++, j++)
        {                
            mas[i, 0] = Convert.ToInt32(startDate[j]);               
            j++;
            mas[i, 1] = Convert.ToInt32(startDate[j]);
        }
        sum = mas[0, 0];
        max = mas[0, 0];
        for (int i = 1; i < mas.GetLength(0); i++)
        {
            sum += mas[i, 0] - mas[i - 1, 1];
            if (max < sum)
            {
                max = sum;
            }
        }
        Console.WriteLine("Время простоя второй машины при первичном порядке: " + max);
    }

    static void Main(string[] args)
    {
        File.WriteAllText("Финальное распределение.txt", "");
        List<string> startDate = new List<string>();
        readFiles(startDate);
        List<int> OneMachine = new List<int>();
        List<int> TwoMachine = new List<int>();
        twoListAboutMachine(startDate, OneMachine,TwoMachine);
        int[,] finalyDate = new int[startDate.Count/2, 2];
        sortList(OneMachine, TwoMachine, finalyDate);
        SearchOptimalTime(finalyDate, startDate);          
        Console.ReadKey();

    }
}

}

Метод Прюфера (кодирование)

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using test;

namespace Proofer {

internal class Program
{
    static void Main(string[] args)
    {
        try
        {
        string path = "Ribs.txt";
        int k = 0;
        using (StreamReader sr = new StreamReader(path))
        {
            while (sr.EndOfStream != true)
            {
                string[] array = sr.ReadLine().Split(' ');
                k++;
            }
        }
        Trace.Listeners.Add(File.OpenText(path));
        Debug.WriteLine("Количество рёбер в файле: "+k);
        Code code = new Code(path);
        code.Action(k);
        //Decoding dec = new Decoding();
        //dec.Action(k-1);
        Console.ReadKey();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

}

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

namespace test {

internal class Code
{
   string path;
    public Code(string path)
    {
        this.path = path;
    }
    public void Action( int Count) 
    {
        try
        {
        string[] array = new string[Count];
        string[] sp = new string[2];
        array = File.ReadAllLines(path);
        List<int> Start = new List<int>();
        List<int> End = new List<int>();
        List<int> Proofer = new List<int>();
        for(int i = 0; i< array.Length; i++)
        {
            sp = array[i].Split(' ');
            Start.Add(Convert.ToInt32(sp[0]));
            End.Add(Convert.ToInt32(sp[1]));
        }
        int min;
        int index = 0;
        for(int i = 0; i< End.Count-1; i++)
        {
            min = 10000;
            for(int j = 0; j< End.Count; j++)
            {
                if ((End[j]<min) && (Start.Contains(End[j])==false) && (End[j] != 0))
                {
                    min = End[j];
                }
            }
            if(Start.Contains(min) == false)
            {
                index = End.IndexOf(min);
                Proofer.Add(Start[index]);
                End[index] = 0;
                Start[index] = 0;
            }
        }
        Console.WriteLine("Код Прюфера: ");
        foreach(int i in Proofer)
        {
            Console.Write(i+" ");
        }
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

}

юнит тесты

using Proofer; using System.Diagnostics; using test; namespace Tests { public class UnitTest1 { [Fact] public void EqualsNumber() { string path = "Ribs.txt"; string[] array = { }; List V = new List(); using (StreamReader reader = new StreamReader(path)) { while(reader.EndOfStream != true) { array = reader.ReadLine().Split(' '); V.Add(array[0]); Debug.WriteLine(V[0]); } } Assert.Contains("6", V); } } }