10000 Добавлен вспомогательный класс для работы с препятствиями: (чтение пр… · greenDev7/DijkstraAlgorithm@fb36f26 · GitHub
[go: up one dir, main page]

Skip to content

Commit fb36f26

Browse files
author
Зелёный Андрей Сергеевич
committed
Добавлен вспомогательный класс для работы с препятствиями: (чтение препятствий из csv-файла-матрицы, формирование самого препятствия, запись его в файл)
1 parent b7f81ca commit fb36f26

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

Obstacle.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
5+
namespace DijkstraAlgorithm
6+
{
7+
/// <summary>
8+
/// Вспомогательный класс для работы с препятствиями (чтение препятствий из csv-файла-матрицы, формирование самого препятствия, запись его в файл)
9+
/// </summary>
10+
public static class Obstacle
11+
{
12+
/// <summary>
13+
/// Возвращает матрицу-препятствие по csv-файлу. Элементы матрицы имеют только значения 0 либо 1, где 1 означает, что
14+
/// вершина с соответствующими координатами является препятствием. Данная матрица используется для инициализации графа
15+
/// </summary>
16+
/// <param name="fileName">полный путь к csv-файлу, в котором значения (матрица из нулей и единиц) разделены точкой с запятой</param>
17+
/// <returns></returns>
18+
public static int[,] CreateObstacleMatrixFromCSVFile(string fileName)
19+
{
20+
string[] lines = File.ReadAllLines(fileName);
21+
int N = lines.Length;
22+
int M = lines[0].Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).Length;
23+
int[,] obstacleMatrix = new int[N, M];
24+
25+
for (int i = N - 1; i >= 0; i--)
26+
{
27+
string[] array = lines[i].Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
28+
for (int j = 0; j < M; j++)
29+
obstacleMatrix[(N - 1) - i, j] = int.Parse(array[j]);
30+
}
31+
32+
return obstacleMatrix;
33+
}
34+
35+
/// <summary>
36+
/// Возвращает координаты вершин являющихся препятствием из матрицы. Данные координаты препятвий необходимы для их
37+
/// отображения и построения графика
38+
/// </summary>
39+
/// <param name="obstacleMatrix">матрица с препятствиями</param>
40+
/// <returns></returns>
41+
private static List<Point2D> CreateObstacleFromMatrix(int[,] obstacleMatrix)
42+
{
43+
long rowCount = obstacleMatrix.GetLongLength(0);
44+
long columnCount = obstacleMatrix.GetLongLength(1);
45+
46+
List<Point2D> obstaclePoints = new List<Point2D>();
47+
48+
for (int i = 0; i < rowCount; i++)
49+
for (int j = 0; j < columnCount; j++)
50+
if (obstacleMatrix[i, j] == 1)
51+
obstaclePoints.Add(new Point2D(i, j));
52+
53+
return obstaclePoints;
54+
}
55+
56+
/// <summary>
57+
/// Записывает координаты препятствий в файл
58+
/// </summary>
59+
/// <param name="obstacleMatrix">матрица с препятствиями из которой отбираются препятствия</param>
60+
/// <param name="fileName">полный путь к файлу для записи</param>
61+
public static void WriteObstacleToFile(int[,] obstacleMatrix, string fileName)
62+
{
63+
List<Point2D> obstaclePoints = CreateObstacleFromMatrix(obstacleMatrix);
64+
List<string> obstacleLines = new List<string>();
65+
foreach (Point2D point in obstaclePoints)
66+
obstacleLines.Add(string.Format("{0};{1};1", point.i, point.j));
67+
68+
File.WriteAllLines(fileName, obstacleLines);
69+
}
3E6E
70+
}
71+
}

0 commit comments

Comments
 (0)
0