Универсальные шаблоны - C# (204918)
Формулировка задачи:
Вот мой класс для представления граф, нужно переделать его с использование дженериков.
Поясните, как это
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Graphs
{
class graph
{
// ПОЛЯ ДЛЯ РАБОТЫ С ГРАФОМ!!!!!!!
private int numberpoints;
private int[] pointsinfo = new int[100];// хранит информацию каждой точки
public int[,] matrix = new int[100, 100]; // будет в нулевых строке и столбце хранить номер вершины.
// СВОЙСТВА ДЛЯ МАССИВА ИНФЫ О ТОЧКАЪ И РЕБРАХ И ИХ КОЛИЧЕСТВЕЕ!!!!!!!!!
public int Numberpoints
{
get { return numberpoints; }
set { numberpoints = value; }
}
public int this[int i]
{
get
{
return pointsinfo[i];
}
set
{
pointsinfo[i] = value;
}
}
// РАБОТА С ВЕРШИНАМИ ГРАФА!!!!!!!!!!!!!!!!!!
public void Addpointandinfo(int y) // ввод информации о вершине(числовой!)
{
++numberpoints;
pointsinfo[numberpoints] = y;
}
public void Deletepointandinfo(int number) // принимаем ввод номера точки, которую удаляем!! ПОТОМ ДОБАВИТЬ ПРОВЕРКУ АНЛИЧИЯ РЕБРА!!!!!!!!!
{
--numberpoints;
for (int i = number; i < numberpoints + 1; i++)
{
pointsinfo[i] = pointsinfo[i + 1];
}
for (int j = 1; j < numberpoints + 1; j++)
{
for (int i = 1; i < numberpoints + 1; i++)
{
if (i >= number)
{
if (j >= number)
matrix[i, j] = matrix[i + 1, j + 1];
else
matrix[i, j] = matrix[i + 1, j];
}
else
{
if (j >= number)
matrix[i, j] = matrix[i, j + 1];
else
matrix[i, j] = matrix[i, j];
}
}
}
}
public int Checkpoint(int number) // проверяет, если количество больше, чем я вввожу, то возвращает ноль - те есть такой точки нету!!!
{
if (number > numberpoints || number <= 0)
return 0;
else return 1;
}
// РАБОТА С РЕБРАМИ ГРАФА!!!!!!!!!!!!!!!!!
public void Deleteedgeandinfo(int point1, int point2) // выводим матрицу смежности - но номерам удаляем!
{
matrix[point1, point2] = 0;
matrix[point2, point1] = 0;
}
public void Addedgeandinfo(int point1, int point2, int y) // первая точка, втора точка(через которые прокладывается ребро), информация о ребре
{
matrix[point1, point2] = y;
matrix[point2, point1] = y;
}
public int CheckedgeDelete(int point1, int point2) /// проверяет есть ли такие точки в матрице!. Если нет, то возвращает 0. Если есть - 1 !!!
{
if ((point1 > numberpoints) || (point2 > numberpoints) || (point1 < 1) || (point2 < 1))
return 0;
if (matrix[point1, point2] == 0 && matrix[point2, point1] == 0)
return 0;
else return 1;
}
public int CheckedgeAdd(int point1, int point2) /// проверяет есть ли такие точки в матрице!. Если нет, то возвращает 0. Если есть - 1 !!!
{
if ((point1 > numberpoints) || (point2 > numberpoints) || (point1 < 1) || (point2 < 1) || (point1 == point2))
return 0;
if (matrix[point1, point2] == 0 && matrix[point2, point1] == 0)
return 1;
else return 0;
}
// РАБОТА С МАТРИЦЕЙ СМЕЖНОСТИ!!!!!!!!!!!!
public void matrixnull()
{
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
matrix[i, j] = 0;
}
for (int i = 0; i < 100; i++)
{
matrix[i, 0] = i;
matrix[0, i] = i;
}
}
public void begin()
{
Numberpoints = 0;
matrixnull();
Addpointandinfo(623);
Addpointandinfo(234);
Addpointandinfo(456);
Addpointandinfo(354);
Addpointandinfo(34);
Addpointandinfo(905);
Addedgeandinfo(1, 2, 8);
Addedgeandinfo(1, 4, 7);
Addedgeandinfo(2, 3, 6);
Addedgeandinfo(3, 4, 5);
Addedgeandinfo(6, 4, 4);
Addedgeandinfo(5, 6, 3);
Addedgeandinfo(3, 6, 2);
Addedgeandinfo(5, 1, 1);
Addedgeandinfo(5, 4, 9);
Addedgeandinfo(5, 3, 4);
}
}
}Решение задачи: «Универсальные шаблоны»
textual
Листинг программы
public void begin()
{
Numberpoints = 0;
matrixnull();
int[] list1 = new int[] {623, 234, 456, 354, 34, 905};
for (int i =0; i < list1.lenght; i++)
Addpointandinfo(list1[i]);
int[][] list2 = new int[][]
{
new int[] {1,2,3},
new int[] {1,4,7},
//...
new int[] {5,3,4}
}
for (int i=0; i<list2.Lenght; i++)
Addedgeandinfo(list2[i].[0], list2[i].[1], list2[i].[2]);
}