三元组存储稀疏矩阵

发布时间 2023-10-27 19:44:19作者: 小菜碟子
 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <iostream>
 3 #define _CRT_SECURE_NO_WARNINGS
 4 using namespace std;
 5 
 6 int arr[11][11];
 7 
 8 struct TripleArray
 9 {
10     int row;
11     int col;
12     int val;
13 };
14 //三元表
15 
16 int main()
17 {
18     int row = 1;
19     int col = 0;
20 
21     //文件读取矩阵操作
22     FILE* fp = fopen("text.txt", "r");
23     int a = fgetc(fp);
24     while (a != EOF)
25     {
26         if (a != ' ' && a != '\n')
27         {
28             int sum = a - '0';
29             a = fgetc(fp);
30             while (a - '0' >= 0 && a - '0' <= 9)
31             {
32                 sum = sum * 10 + a - '0';
33                 a = fgetc(fp);
34             }
35             col++;
36             arr[row][col] = sum;
37         }
38         else if (a == '\n')
39         {
40             row++;
41             col = 0;
42         }
43         a = fgetc(fp);
44     }
45 
46     int num = 1;
47     TripleArray Mari[200];
48     //三元数组
49 
50     for (int i = 1; i <= row; i++)
51     {
52         for (int j = 1; j <= col; j++)
53         {
54             if (arr[i][j] != 0)
55             {
56                 Mari[num].col = j;
57                 Mari[num].row = i;
58                 Mari[num].val = arr[i][j];
59                 num++;
60             }
61         }
62     }
63 
64     cout << "三元组是:" << endl;
65     for (int i = 1; i < num; i++)
66         cout << Mari[i].row << " " << Mari[i].row << " " << Mari[i].val << endl;
67 
68     cout << "矩阵转置" << endl;
69     for (int i = 1; i < num; i++)
70     {
71         int t = Mari[i].col;
72         Mari[i].col = Mari[i].row;
73         Mari[i].row = t;
74     }
75 
76     //可以选择将矩阵按行排序一下
77 }