| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1623 人关注过本帖
标题:求助 关于稀疏矩阵的数组存储表示,转置,输出
只看楼主 加入收藏
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
 问题点数:0 回复次数:7 
求助 关于稀疏矩阵的数组存储表示,转置,输出
在计算机中一般矩阵的标准存储是一个二维数组,但为了节约空间把一个稀疏矩阵的存储表示成一个三元组(行、列、值)。
例如一个4×4的稀疏矩阵
5 0 0 1
0 0 0 0
0 1 0 2
0 0 1 8  
用三元组(1,1,5)表示第一行第一列的值是5,三元组(1,4,1) 意思是第1行第4列的值是1,以此类推。

现在要求把这个稀疏矩阵放入一个数组中,然后把这个矩阵进行转置(要求复杂度为O(columns+elements)colums为列数,elements为非0元的个数)输出(需要输出矩阵中的所以元素)
搜索更多相关主题的帖子: elements 洪潪 columns olums 
2008-08-07 13:32
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
这个是我写的,高手帮忙看一下,谢谢。

#include <stdio.h>
#include <stdlib.h>
#define  MAX_TERM    100

#ifndef  __MATRIX__H
struct Matrix ;
typedef struct Matrix * PtrToMatrix ;
typedef PtrToMatrix  pmatrix ;
void InputVal(pmatrix  a) ;
void Print(pmatrix a) ;
void Transposs(pmatrix a , pmatrix b) ;
struct Matrix {
       unsigned int row ;
       unsigned int col ;
       int  value ;
};
#endif

 void InputVal(pmatrix  a)
{
      unsigned int  i ;
      scanf("%u%u%d" , &a[0].row ,&a[0].col,&a[0].value) ;  //数组的第一个位置存储稀疏矩阵的行数,列数,非0元的个数
      for(i = 1 ; i <= a[0].value ; i++)
          scanf("%u%u%d" , &a[i].row ,&a[i].col,&a[i].value) ; //输入矩阵的行,列,对应值
 return ;
}

void Print(pmatrix  a)                 //这函数不知到思路对不对
{
           unsigned int  i , j , k = 0 ;
           unsigned int current_row , current_col , current_val ;
           for(i = 0 ; i < a[0].row ; i++)
            {
                for(j = 0 ; j < a[0].col ; j++)
                {
                   current_row = a[k % a[0].value + 1].row ;    //这不知怎么写,K总是与行,列对不齐
                   current_col = a[k % a[0].value + 1].col ;
                   current_val = a[k % a[0].value + 1].value ;
                   if(i == current_row && j == current_col)
                      printf("%d " , current_val ) ;
                   else
                       printf("0 ") ;
                   k++ ;
                }
               putchar('\n') ;
           }
}
/*这个转置函数的复杂度为O(columns*elements)*,怎么才能写成O(columns+elements)*/
void Transposs(pmatrix a , pmatrix b)
{
     unsigned int  k = 1 , i , j ;
     b[0].col = a[0].row , b[0].row = a[0].col , b[0].value = a[0].value ;
     for(i = 0 ; i < a[0].col ; i++)
     {
         for(j = 1 ; j < a[0].value ; j++)
         {
             if(a[j].col == i)
              {
                 b[k].col = a[j].row ;
                 b[k].row = a[j].col ;
                 b[k].value = a[j].value ;
                 k++ ;
               }
          }
      }
}

int main(void)
{
      struct Matrix   matrix_a[MAX_TERM] , matrix_b[MAX_TERM] ;
      InputVal(matrix_a) ;
      Transposs(matrix_a,matrix_b);
      Print(matrix_b) ;
  return 0 ;
}
2008-08-07 13:34
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
我人工置顶,帮我看看。
2008-08-07 17:11
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
顶上去,直到解决为止
2008-08-07 18:06
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
顶上去,直到解决为止
2008-08-07 19:33
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
一天了,怎么就没人啊
2008-08-07 22:00
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
顶上去,直到解决为止
2008-08-07 23:15
CNewer
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-1-24
收藏
得分:0 
顶上去,直到解决为止
2008-08-08 12:49
快速回复:求助 关于稀疏矩阵的数组存储表示,转置,输出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024642 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved