private void button1_Click(object sender, EventArgs e) { if (V.Count != 0) { Program.FORM.listBoxMatrix.Items.Clear(); Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); Program.FORM.listBoxMatrix.Refresh(); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); //---------------------------------- Program.CHECK.ShowDialog(); //---------------------------------- Program.FORM.listBoxMatrix.Items.Clear(); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); textBox1.Hide(); } }
private void показатьРаскраскуГрафаToolStripMenuItem_Click(object sender, EventArgs e) { //пока расположить вершины на окружности AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; //Vtmp = new List<Vertex>(V); //Etmp = new List<Edge>(E); //V.Clear(); //E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); this.V = new List <Vertex>(g.Ver); Vectors v = g.GetColouring(); for (int i = 0; i < V.Count; i++) { V[i].color = (int)v[i]; } this.E = new List <Edge>(g.Ed); G.drawThisGraph(g); }
private Tuple <Vectors, double, double> HalfSolve(int len) { SqMatrix iD1 = D1.SubMatrix(len), iD2 = D2.SubMatrix(len), iS = S.SubMatrix(len); Vectors iR1 = R1.SubVector(len), iR2 = R2.SubVector(len); SqMatrix iD1m = D1m.SubMatrix(len), iD2m = D2m.SubMatrix(len), idl; Vectors idr; idl = (D2 - S * (D1m * S)).SubMatrix(len); idr = (R2 + S * D1m * R1).SubVector(len); Vectors id = idl.Solve(idr), icnew = (D1m * (R1 + S * id)).SubVector(len); Vectors res = Vectors.Union2(icnew, id); double p1 = IntegralClass.IntegralCurve((Point y) => (TestFuncAndCurve.Grads[GF - 1](y) * TestFuncAndCurve.Norm[CIRCLE - 1](y)).Sqr(), CIRCLE - 1); double p2 = IntegralClass.IntegralCurve((Point y) => (U(y)).Sqr(), CIRCLE - 1); Functional fif = (Point x) => { double s = 0; for (int i = 0; i < id.Deg; i++) { s += icnew[i] * alpha(x, i) + id[i] * beta(x, i); } return(Math.Abs(s - KursMethods.U(x))); }; double L = IntegralClass.Integral(fif, CIRCLE - 1); $"len = {len}, L = {this.F(res)}".Show(); return(new Tuple <Vectors, double, double>(res, F(res), L)); }
private void button5_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName); SqMatrix M; try { M = new SqMatrix(sr); } catch { M = new SqMatrix((int)firstRowNum.Value); } dataGridView1.ColumnCount = M.ColCount; dataGridView1.RowCount = M.ColCount; firstRowNum.Value = M.ColCount; for (int i = 0; i < M.ColCount; i++) { dataGridView1.Columns[i].Width = 40; for (int j = 0; j < M.ColCount; j++) { dataGridView1.Rows[i].Cells[j].Value = M[i, j]; } } //MessageBox.Show(sr.ReadToEnd()); sr.Close(); } }
/// <summary> /// Add one matrix to another. /// </summary> /// <typeparam name="T">Type of matrix elements.</typeparam> /// <param name="first">First matrix.</param> /// <param name="second">Second matrix.</param> /// <exception cref="ArgumentNullException">Trows if one of matrix is null.</exception> /// <returns>Resulted matrix.</returns> public static Matrix <T> Add <T>(this Matrix <T> first, Matrix <T> second) { if (first == null) { throw new ArgumentNullException(nameof(first)); } if (second == null) { throw new ArgumentNullException(nameof(second)); } if (first.Rank != second.Rank) { throw new ArgumentException($"Wrong dimensions of matrix."); } Matrix <T> temp = new SqMatrix <T>(new T[] { }, first.Rank); for (int row = 0; row < temp.Rank; row++) { for (int column = 0; column < temp.Rank; column++) { temp[row, column] = (dynamic)first[row, column] + second[row, column]; } } return(ConvertToMatrixType(temp)); }
private void показатьРаскраскуГрафаНаОригинальномИзображенииToolStripMenuItem_Click(object sender, EventArgs e) { AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; //Vtmp = new List<Vertex>(V); //Etmp = new List<Edge>(E); V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); this.E = new List <Edge>(Etmp); this.V = new List <Vertex>(Vtmp); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); Vectors v = g.GetColouring(); for (int i = 0; i < V.Count; i++) { V[i].color = (int)v[i]; } G.drawALLGraph(V, E); }
private void показатьПримерМаксимальногоНезависимогоПодмножестваToolStripMenuItem_Click(object sender, EventArgs e) { Program.FORM.listBoxMatrix.Items.Clear(); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); this.E = new List <Edge>(Etmp); this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++) { V[i].color = 0; } SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); FileStream fs = new FileStream("Информация о графе.txt", FileMode.Create); TextWriter tmp = Console.Out; StreamWriter sw = new StreamWriter(fs); Console.SetOut(sw); Vectors p; Console.WriteLine(); Console.WriteLine("Независимые (внутренне устойчивые) подмножества вершин графа (подмножества наибольшей длины - максимальные, любые подмножества этих подмножеств - тоже независимые подмножества):"); g.ShowIndepSubSets(); Console.WriteLine("Наибольшие независимые подмножества (^наибольшие^ значит, что каждая вершина графа вне этого подмножества смежна вершине в подмножестве):"); g.ShowGreatestIndepSubSets(); Console.Write("-----------> Число независимости графа = {0}. Вершины максимального множества: ", g.IndependenceNumber(out p)); p.Show(); //Vectors v = new Vectors(g.GreatestIndepSubsets[0]); for (int i = 0; i < p.Deg; i++) { V[(int)p[i] - 1].color = 1; } G.drawALLGraph(V, E); sw.Close(); Console.SetOut(tmp); Console.WriteLine("Запись завершена!"); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); }
private void показатьПримерМинимальногоДоминирующегоПодмножестваToolStripMenuItem_Click(object sender, EventArgs e) { Program.FORM.listBoxMatrix.Items.Clear(); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); this.E = new List <Edge>(Etmp); this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++) { V[i].color = 0; } SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); FileStream fs = new FileStream("Информация о графе.txt", FileMode.Create); TextWriter tmp = Console.Out; StreamWriter sw = new StreamWriter(fs); Console.SetOut(sw); g.DominSub(); Console.WriteLine("Доминирующие (внешне устойчивые) множества (записано каждое третье):"); g.ShowDominSub(3); Console.WriteLine("Минимальные (не содержащие в себе других) доминирующие множества:"); g.ShowMinDominSub(); Console.WriteLine("Наименьшие (по мощности) доминирующие множества:"); g.ShowSmallestDominSub(); Console.WriteLine("-----------> Число доминирования равно {0}", g.DominationNumber); Vectors v = new Vectors(g.MinimalDominSubsets[0]); for (int i = 0; i < v.Deg; i++) { V[(int)v[i] - 1].color = 1; } G.drawALLGraph(V, E); sw.Close(); Console.SetOut(tmp); Console.WriteLine("Запись завершена!"); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); }
public void AddTest_ValidInput_ValidResult_1() { var first = new SqMatrix <int>(Enumerable.Range(1, 9), 3); var second = new SqMatrix <int>(Enumerable.Range(1, 9).Reverse(), 3); var expected = new SymmMatrix <int>(Enumerable.Repeat(10, 6), 3); var actual = first.Add(second); Assert.IsTrue(expected.Equals(actual)); }
public void AddTest_ValidInput_ValidResult_2() { var first = new SqMatrix <int>(Enumerable.Range(2, 16), 4); var second = new SqMatrix <int>(Enumerable.Repeat(5, 16), 4); var expected = new SqMatrix <int>(Enumerable.Range(7, 16), 4); var actual = first.Add(second); Assert.IsTrue(expected.Equals(actual)); }
private void особыеДействияСИзображениемToolStripMenuItem_Click(object sender, EventArgs e) { AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); if (!save) { Vtmp = new List <Vertex>(V); Etmp = new List <Edge>(E); save = true; } }
public void InvertMat() { CSqMatrix mat = new CSqMatrix(new Complex[, ] { { 11, 12, 4 }, { 0, 9, 30 }, { 40, 5, 3 } }); double n1 = (mat.Invert() * mat - SqMatrix.E(3)).CubeNorm; n1.Show(); double n2 = (mat.InvertSum * mat - SqMatrix.E(3)).CubeNorm; n2.Show(); Assert.IsTrue(n1 <= 1e-6 && n2 <= 1e-6); }
private void button3_Click(object sender, EventArgs e) { SqMatrix M = new SqMatrix(dataGridView1.RowCount); //if (M == null) M = new SqMatrix(); for (int i = 0; i < M.RowCount; i++) { for (int j = 0; j < M.ColCount; j++) { M[i, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value); } } Program.FORM.g = new Graphs(M); this.Close(); }
private void button3_Click(object sender, EventArgs e) { Program.FORM.listBoxMatrix.Items.Clear(); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); //g.ShowInfoFile(); FileStream fs = new FileStream("Информация о графе.txt", FileMode.Create); TextWriter tmp = Console.Out; StreamWriter sw = new StreamWriter(fs); Console.SetOut(sw); //Polynom pol = g.Xpolymon(); //Console.Write("Хроматический полином: "); pol.Show(); //Console.WriteLine("Тогда хроматическое число X = {0}", g.ChromaticNumber); g.ShowCheck0(); try { g.ShowCheck11(); } catch (Exception y) { Console.Write("----------Исключение! "); Console.WriteLine(y.Message); } sw.Close(); Console.SetOut(tmp); Console.WriteLine("Запись завершена!"); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); }
public static void SqMatrixExamples() { var mat = new SqMatrix(new double[, ] { { 1, -5 }, { -40, 0.632 } }); mat.PrintMatrix(); // 1 -5 //- 40 0,632 var i = SqMatrix.I(mat.RowCount); i.PrintMatrix(); //1 0 //0 1 var mat2 = mat + i * 40; mat2.PrintMatrix(); //41 -5 //-40 40,632 var inv = mat.Invertion; inv.PrintMatrix(); //-0,003170017254524297 -0,02507925043136311 //-0,20063400345090485 - 0,0050158500862726215 (inv * mat).PrintMatrix(); //1 0 //2,7755575615628914E-17 0,9999999999999999 (inv * mat).Track.Show(); // 2 (inv * mat).CubeNorm.Show(); // 1 (inv * mat).Det.Show(); // 0,9999999999999999 mat.Solve(new Vectors(4.0, -5)).Show(); // ( 0,11271618313871837 -0,7774567633722562 ) }
private void расположитьВершиныНаОкружностиToolStripMenuItem_Click(object sender, EventArgs e) { AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; //Vtmp = new List<Vertex>(V); //Etmp = new List<Edge>(E); V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); this.V = new List <Vertex>(g.Ver); this.E = new List <Edge>(g.Ed); G.drawThisGraph(g); }
private void button6_Click(object sender, EventArgs e) { Program.FORM.listBoxMatrix.Items.Clear(); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); //g.ShowInfoFile(); FileStream fs = new FileStream("Информация о графе.txt", FileMode.Create); TextWriter tmp = Console.Out; StreamWriter sw = new StreamWriter(fs); Console.SetOut(sw); g.ShowCheck0(); try { g.ShowCheck5(); } catch (Exception y) { Console.WriteLine(y.Message); } sw.Close(); Console.SetOut(tmp); Console.WriteLine("Запись завершена!"); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); }
private void нарисоватьДополнениеГрафаToolStripMenuItem_Click(object sender, EventArgs e) { AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; //Vtmp = new List<Vertex>(V); //Etmp = new List<Edge>(E); V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); Graphs dg = g.Addition; this.V = new List <Vertex>(g.Ver); this.E = new List <Edge>(g.Ed); G.drawThisGraph(dg); }
public void SqMatrixTest_AccessByOutOfRangeIndex() { var first = new SqMatrix <int>(Enumerable.Range(2, 16), 4); Assert.Throws <ArgumentException>(() => first[-1, 12] = 0); }
public void AddTest_WithNullElement() { var first = new SqMatrix <int>(Enumerable.Range(2, 16), 4); Assert.Throws <ArgumentNullException>(() => first.Add(null)); }
private void изобразитьГрафКликToolStripMenuItem_Click(object sender, EventArgs e) { Program.FORM.listBoxMatrix.Items.Clear(); //Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); this.E = new List <Edge>(Etmp); this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++) { V[i].color = 0; } SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); FileStream fs = new FileStream("Информация о графе.txt", FileMode.Create); TextWriter tmp = Console.Out; StreamWriter sw = new StreamWriter(fs); Console.SetOut(sw); Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); Program.FORM.listBoxMatrix.Refresh(); g.CliquesSub(); Graphs o = g.CliquesGraph; G.drawThisGraph(o); Console.WriteLine("Клики графа (вершины, дающие полные подграфы; записан каждый второй):"); Graphs.ShowVectorsList(g.CliquesSubsets, 2); Console.WriteLine("Макcимальные (не содержащиеся в других) клики:"); Graphs.ShowVectorsList(g.MaximalCliquesSubsets); Console.WriteLine("Наибольшие (по мощности) клики:"); Graphs.ShowVectorsList(g.GreatestCliquesSubsets); Console.WriteLine("-----------> Число кликового покрытия равно {0}", g.CliquesNumber); //Console.WriteLine("-----------> Рёберная плотность графа равна 2q/(p(p-1) = 2*{0}/({1}*{2}) = {3}", g.Edges, g.p, g.p - 1, g.Density); Console.WriteLine("Матрица кликов графа:"); g.CliquesMatrix.PrintMatrix(); //Console.WriteLine("Матрица смежности графа клик:"); g.CliquesGraph.A.PrintMatrix(); Vectors v = new Vectors(g.GreatestCliquesSubsets[0]); for (int i = 0; i < v.Deg; i++) { V[(int)v[i] - 1].color = 1; } //G.drawALLGraph(V, E); sw.Close(); Console.SetOut(tmp); Console.WriteLine("Запись завершена!"); Program.FORM.listBoxMatrix.Items.Clear(); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); }
/// <summary> /// Созадть систему матриц и векторов по базисным функция /// </summary> /// <param name="n">Число базисных функций. Если -1, то берутся все функции</param> public BiharmonicEquation(int n = -1) { if (n == -1) { n = masPoints.Length; } D1 = new SqMatrix(n); D2 = new SqMatrix(n); S = new SqMatrix(n); R1 = new Vectors(n); R2 = new Vectors(n); Parallel.For(0, n, (int i) => { for (int j = i; j < n; j++) { D1[i, j] = IntegralClass.IntegralCurve((Point x) => alpha(x, i) * alpha(x, j) + alphanu(x, i) * alphanu(x, j), CIRCLE - 1); D2[i, j] = IntegralClass.IntegralCurve((Point x) => beta(x, i) * beta(x, j) + betanu(x, i) * betanu(x, j), CIRCLE - 1); S[i, j] = IntegralClass.IntegralCurve((Point x) => alpha(x, i) * beta(x, j) + alphanu(x, i) * betanu(x, j), CIRCLE - 1); } R1[i] = IntegralClass.IntegralCurve((Point y) => alphanu(y, i) * Unu(y) + alpha(y, i) * U(y), CIRCLE - 1); R2[i] = IntegralClass.IntegralCurve((Point y) => betanu(y, i) * Unu(y) + beta(y, i) * U(y), CIRCLE - 1); for (int j = i + 1; j < n; j++) { D1[j, i] = D1[i, j]; D2[j, i] = D2[i, j]; S[j, i] = S[i, j]; } }); d = new Vectors(n); cnew = new Vectors(n); ErrorsMasL = new double[n]; ErrorsMasQ = new double[n]; p1 = IntegralClass.IntegralCurve((Point y) => Unu(y).Sqr(), CIRCLE - 1); p2 = IntegralClass.IntegralCurve((Point y) => U(y).Sqr(), CIRCLE - 1); $"p1 = {p1}, p2 = {p2}".Show(); var mems = new Memoize <Point, Vectors[]>((Point p) => { Vectors[] r = new Vectors[4]; for (int i = 0; i < 4; i++) { r[i] = new Vectors(dim); } for (int i = 0; i < dim; i++) { r[0][i] = alpha(p, i); r[1][i] = alphanu(p, i); r[2][i] = beta(p, i); r[3][i] = betanu(p, i); } return(r); }).Value; Func <Point, Vectors[]> AB = (Point p) => mems(p); Func <Vectors, double> FF = (Vectors v) => { Vectors ce = new Vectors(this.dim); Vectors de = new Vectors(this.dim); for (int i = 0; i < v.Deg / 2; i++) { ce[i] = v[i]; de[i] = v[i + v.Deg / 2]; } Functional func = (Point p) => { var vec = AB(p); return((U(p) - ce * vec[0] - de * vec[2]).Sqr() + (Unu(p) - ce * vec[2] - de * vec[3]).Sqr()); }; return(IntegralClass.IntegralCurve(func, CIRCLE - 1)); Functional f1 = (Point y) => { double sum = U(y); for (int i = 0; i < dim; i++) { sum -= ce[i] * alpha(y, i) + de[i] * beta(y, i); } return(sum * sum); }; Functional f2 = (Point y) => { double sum = Unu(y); for (int i = 0; i < dim; i++) { sum -= ce[i] * alphanu(y, i) + de[i] * betanu(y, i); } return(sum * sum); }; return(IntegralClass.IntegralCurve((Point p) => f1(p) + f2(p), CIRCLE - 1)); }; F = (Vectors v) => { return(FF(v)); Vectors cc = new Vectors(this.dim); Vectors dd = new Vectors(this.dim); for (int i = 0; i < v.Deg / 2; i++) { cc[i] = v[i]; dd[i] = v[i + v.Deg / 2]; } int k = this.dim; double sum = p1 + p2 - 2 * (cc * R1 + dd * R2); for (int i = 0; i < k; i++) { for (int j = 0; j < k; j++) { sum += 2 * cc[i] * dd[j] * S[i, j] + cc[i] * cc[j] * D1[i, j] + dd[i] * dd[j] * D2[i, j]; } } return(sum); }; Vectors tmp = Vectors.Union2(new Vectors(dim), Vectors.Random(dim, -4, 4)); $"Error! {FF(tmp)} != {F(tmp)}".Show(); // Parallel.Invoke( //() => D1m = D1.Invertion, //() => D2m = D2.Invertion //); // dl = D2 - S * (D1m * S); // dr = R2 + S * D1m * R1; // slau = new SLAU(dl, dr); }
/// <summary> /// Вывести показатели качества обращения матриц /// </summary> private void NevaskShow() { $"Невязка D1: {(D1 * D1m - SqMatrix.E(D1.RowCount)).OctNorn}".Show(); $"Невязка D2: {(D2 * D2m - SqMatrix.E(D1.RowCount)).OctNorn}".Show(); }
private void показатьПримерМинимальногоВершинногоПокрытияToolStripMenuItem_Click(object sender, EventArgs e) { Program.FORM.listBoxMatrix.Items.Clear(); //Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); AMatrix = new int[V.Count, V.Count]; G.fillAdjacencyMatrix(V.Count, E, AMatrix); selectButton.Enabled = true; drawVertexButton.Enabled = true; drawEdgeButton.Enabled = true; deleteButton.Enabled = true; V.Clear(); E.Clear(); G.clearSheet(); sheet.Image = G.GetBitmap(); this.E = new List <Edge>(Etmp); this.V = new List <Vertex>(Vtmp); for (int i = 0; i < V.Count; i++) { V[i].color = 0; } SqMatrix M = new SqMatrix(AMatrix); g = new Graphs(M); FileStream fs = new FileStream("Информация о графе.txt", FileMode.Create); TextWriter tmp = Console.Out; StreamWriter sw = new StreamWriter(fs); Console.SetOut(sw); Program.FORM.listBoxMatrix.Items.Add("...Операция может занять несколько секунд... или не несколько..."); Program.FORM.listBoxMatrix.Refresh(); g.VCoatingSub(); Console.WriteLine("Вершинные покрытия графа (записано каждое третье):"); Graphs.ShowVectorsList(g.VCoatingSubsets, 3); Console.WriteLine("Минимальные (не содержащие в себе других) вершинные покрытия:"); Graphs.ShowVectorsList(g.MinimalVCoatingSubsets); Console.WriteLine("Наименьшие (по мощности) вершинные покрытия:"); g.ShowSmallestVCoatingSub(); Console.WriteLine("-----------> Число вершинного покрытия равно {0}", g.VCoatingNumber); Vectors v = new Vectors(g.MinimalVCoatingSubsets[0]); for (int i = 0; i < g.MinimalVCoatingSubsets.Count; i++) { if (g.MinimalVCoatingSubsets[i].Deg == g.VCoatingNumber) { v = new Vectors(g.MinimalVCoatingSubsets[i]); break; } } for (int i = 0; i < v.Deg; i++) { V[(int)v[i] - 1].color = 1; } G.drawALLGraph(V, E); sw.Close(); Console.SetOut(tmp); Console.WriteLine("Запись завершена!"); Program.FORM.listBoxMatrix.Items.Clear(); StreamReader sr = new StreamReader("Информация о графе.txt"); string s = ""; while (s != null) { listBoxMatrix.Items.Add(s); s = sr.ReadLine(); } sr.Close(); }