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