1
+ import 'dart:io' ;
2
+
3
+ /**
4
+ * 图的邻接矩阵表示方式
5
+ *
6
+ * 注:
7
+ * 先读取文件,将相应数据赋值
8
+ */
9
+ class AdjMatrix {
10
+ int ? _V ;//图的顶点数量
11
+ int ? _E ;//图的边的数量
12
+ List ? _adj;//邻接矩阵
13
+
14
+
15
+ AdjMatrix ( V ,E ,List list) {
16
+ _V = V ;
17
+ _E = E ;
18
+ if (V < 0 ) throw Exception ("V must be non-negative" );
19
+ if (E < 0 ) throw Exception ("E must be non-negative" );
20
+ _adj = List .generate (V , (_)=> List .generate (V ,(_)=> 0 ),growable: false );
21
+ for (int i = 1 ;i<= E ;i++ ){
22
+ int a = int .parse (list[i].split (" " )[0 ]);
23
+ _validateVertex (a);
24
+ int b = int .parse (list[i].split (" " )[1 ]);
25
+ _validateVertex (b);
26
+ _adj! [a][b] = 1 ;
27
+ _adj! [b][a] = 1 ;
28
+ }
29
+ }
30
+
31
+ _validateVertex (int v){
32
+ if (v < 0 || v >= _V ! )
33
+ throw new Exception ("vertex $v is invalid" );
34
+ }
35
+
36
+ int ? V (){
37
+ return _V ;
38
+ }
39
+
40
+ bool hasEdge (int v, int w){
41
+ _validateVertex (v);
42
+ _validateVertex (w);
43
+ return _adj! [v][w] == 1 ;
44
+ }
45
+
46
+ int _degree (int v){
47
+ return _adj! [v].length;
48
+ }
49
+
50
+ int ? E (){
51
+ return _E ;
52
+ }
53
+
54
+ List <int > adj (int v){
55
+ _validateVertex (v);
56
+ List <int > res = List .filled (_V ! , 0 ,growable: true );
57
+ for (int i = 0 ; i < _V ! ; i ++ )
58
+ if (_adj! [v][i] == 1 )
59
+ res.add (i);
60
+ return res;
61
+ }
62
+
63
+ @override
64
+ String toString () {
65
+ StringBuffer sb = new StringBuffer ();
66
+ sb.write ("V = $_V , E = $_E \n " );
67
+ for (int i = 0 ; i < _V ! ; i ++ ) {
68
+ for (int j = 0 ; j < _V ! ; j ++ )
69
+ sb.write ("${_adj ![i ][j ]} " );
70
+ sb.write ('\n ' );
71
+ }
72
+ return sb.toString ();
73
+ }
74
+
75
+
76
+ }
77
+
78
+ void main () async {
79
+ File content = File ("g.txt" );
80
+ List <String > list = await content.readAsLines ();
81
+ //读取到文件的顶点数量以及
82
+ print (list[0 ].split (" " )[0 ]);
83
+ print (list[0 ].split (" " )[1 ]);
84
+ int v = int .parse (list[0 ].split (" " )[0 ]) ;
85
+ int e = int .parse (list[0 ].split (" " )[1 ]) ;
86
+ //
87
+ AdjMatrix adjMatrix = AdjMatrix (v, e, list);
88
+ print (adjMatrix);
89
+
90
+ }
0 commit comments