1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Diagnostics;
6 using System.Threading;
7 using System.IO;
8
9 namespace ConsoleApplication2
10 {
11 public class Program
12 {
13 public static void Main()
14 {
15 Martix martix = new Martix();
16
17 //構(gòu)建三元組
18 var node = martix.Build();
19
20 foreach (var item in node.nodes)
21 {
22 Console.WriteLine(item.x + "\t" + item.y + "\t" + item.element);
23 }
24
25 Console.WriteLine("******************************************************");
26
27 var mynode = martix.ConvertSpNode(node);
28
29 foreach (var item in mynode.nodes)
30 {
31 Console.WriteLine(item.x + "\t" + item.y + "\t" + item.element);
32 }
33
34 Console.Read();
35 }
36 }
37
38 public class Martix
39 {
40 /// <summary>
41 /// 三元組
42 /// </summary>
43 public class Unit
44 {
45 public int x;
46 public int y;
47 public int element;
48 }
49
50 /// <summary>
51 /// 標識矩陣
52 /// </summary>
53 public class SPNode
54 {
55 //矩陣總行數(shù)
56 public int rows;
57
58 //矩陣總列數(shù)
59 public int cols;
60
61 //非零元素的個數(shù)
62 public int count;
63
64 //矩陣中非零元素
65 public List<Unit> nodes = new List<Unit>();
66 }
67
68 /// <summary>
69 /// 構(gòu)建一個三元組
70 /// </summary>
71 /// <returns></returns>
72 public SPNode Build()
73 {
74 SPNode spNode = new SPNode();
75
76 //遵循行優(yōu)先的原則
77 spNode.nodes.Add(new Unit() { x = 0, y = 0, element = 8 });
78 spNode.nodes.Add(new Unit() { x = 1, y = 2, element = 1 });
79 spNode.nodes.Add(new Unit() { x = 2, y = 3, element = 6 });
80 spNode.nodes.Add(new Unit() { x = 3, y = 1, element = 4 });
81
82 //4階矩陣
83 spNode.rows = spNode.cols = 4;
84
85 //非零元素的個數(shù)
86 spNode.count = spNode.nodes.Count;
87
88 return spNode;
89 }
90
91 /// <summary>
92 /// 行轉(zhuǎn)列運算
93 /// </summary>
94 /// <param name="spNode"></param>
95 /// <returns></returns>
96 public SPNode ConvertSpNode(SPNode spNode)
97 {
98 //矩陣元素的x和y坐標進行交換
99 SPNode spNodeLast = new SPNode();
100
101 //行列互換
102 spNodeLast.rows = spNode.cols;
103 spNodeLast.cols = spNode.rows;
104 spNodeLast.count = spNode.count;
105
106 //循環(huán)原矩陣的列數(shù) (行列轉(zhuǎn)換)
107 for (int col = 0; col < spNode.cols; col++)
108 {
109 //循環(huán)三元組行的個數(shù)
110 for (int sp = 0; sp < spNode.count; sp++)
111 {
112 var single = spNode.nodes[sp];
113
114 //找到三元組中存在的相同編號
115 if (col == single.y)
116 {
117 spNodeLast.nodes.Add(new Unit()
118 {
119 x = single.y,
120 y = single.x,
121 element = single.element
122 });
123 }
124 }
125 }
126
127 return spNodeLast;
128 }
129 }
130 }