posts - 4,  comments - 2,  trackbacks - 0
看严蔚敏的数据结构关于稀疏矩阵相乘的一节,觉得有点复杂,自己按照个人理解,写了一个相乘的程序,把相乘后的矩阵先转化成了一维数组,代码如下,大家指点指点(注:本人非计算机专业,若果有低级错误,见笑)
  1 #include <stdio.h>
  2 
  3 #include <stdlib.h>
  4 
  5 
  6 
  7 #define max 12
  8 
  9 
 10 
 11 typedef struct{
 12 
 13         int i,j;
 14 
 15         int e;
 16 
 17 }triple;
 18 
 19 
 20 
 21 typedef struct{
 22 
 23         triple data[max+1];
 24 
 25         int mu,tu,nu;
 26 
 27 }tsmatrix;
 28 
 29 
 30 
 31 void main()
 32 
 33 {
 34 
 35         tsmatrix M;
 36 
 37         tsmatrix N;
 38 
 39         int Q[7]={0};//数组下标从1开始
 40 
 41         int p=1,q=1;//下面很长的一部分,是直接输入三元组,
 42 
 43         int s=1;
 44 
 45 
 46 
 47         M.mu=3;//行数
 48 
 49         M.nu=5;//列数
 50 
 51         M.tu=6;//非零元的个数
 52 
 53 
 54 
 55         M.data[1].i=1;                           
 56 
 57         M.data[1].j=1;
 58 
 59         M.data[1].e=3;
 60 
 61 
 62 
 63         M.data[2].i=1;
 64 
 65         M.data[2].j=4;
 66 
 67         M.data[2].e=5;
 68 
 69 
 70 
 71         M.data[3].i=1;
 72 
 73         M.data[3].j=5;
 74 
 75         M.data[3].e=-2;
 76 
 77 
 78 
 79         M.data[4].i=2;
 80 
 81         M.data[4].j=2;
 82 
 83         M.data[4].e=-1;
 84 
 85 
 86 
 87         M.data[5].i=3;
 88 
 89         M.data[5].j=1;
 90 
 91         M.data[5].e=2;
 92 
 93 
 94 
 95         M.data[6].i=3;
 96 
 97         M.data[6].j=5;
 98 
 99         M.data[6].e=4;
100 
101 
102 
103         N.mu=5;//行数
104 
105         N.nu=2;//列数
106 
107         N.tu=6;//非零元的个数
108 
109 
110 
111         N.data[1].i=1;
112 
113         N.data[1].j=2;
114 
115         N.data[1].e=2;
116 
117 
118 
119         N.data[2].i=2;
120 
121         N.data[2].j=1;
122 
123         N.data[2].e=1;
124 
125 
126 
127         N.data[3].i=3;
128 
129         N.data[3].j=1;
130 
131         N.data[3].e=-2;
132 
133 
134 
135         N.data[4].i=3;
136 
137         N.data[4].j=2;
138 
139         N.data[4].e=4;
140 
141 
142 
143         N.data[5].i=5;
144 
145         N.data[5].j=1;
146 
147         N.data[5].e=3;
148 
149 
150 
151         N.data[6].i=5;
152 
153         N.data[6].j=2;
154 
155         N.data[6].e=6;
156 
157 
158 
159         for(p=1;p<=M.tu;p++) //开始进入正题
160 
161         {
162 
163                 for(q=1;q<=N.tu;q++)
164 
165                 {
166 
167                         if(M.data[p].j==N.data[q].i)
168 
169                         {
170 
171                                 printf("p=%d,q=%d \n",p,q);//打印测试
172 
173 
174 
175                                 printf("%d,%d,%d \n",M.data[p].e,N.data[q].e,(M.data[p].i-1)*N.nu+N.data[q].j);//打印测试
176 
177                 
178 
179                                 Q[(M.data[p].i-1)*N.nu+N.data[q].j]+=M.data[p].e*N.data[q].e;//将相乘的结果先存入一维数组
180 
181                         }
182 
183                         else continue;
184 
185                 }
186 
187         }
188 
189         
190 
191         for(s=1;s<=6;s++)
192 
193         {
194 
195                 printf("%d ",Q[s]);//打印一维数组
196 
197         }
198 
199 }
200 
posted on 2010-08-04 13:06 ypp 阅读(455) 评论(0)  编辑 收藏 引用 所属分类: c++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿

随笔分类(4)

随笔档案(4)

搜索

  •  

最新评论

阅读排行榜

评论排行榜