| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 710 人关注过本帖
标题:【求助】稀疏矩阵的快速转置!
取消只看楼主 加入收藏
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
结帖率:97.44%
收藏
已结贴  问题点数:50 回复次数:1 
【求助】稀疏矩阵的快速转置!
程序代码:
void transpose(term a[],term b[])
{
    int row_terms[MAX],startingpos[MAX];
    int i,j,num_cols=a[0].col,num_terms=a[0].value;
    b[0].row=num_cols;b[0].col=a[0].row;
    b[0].value=num_terms;
    if(num_terms>0)
    {
        for(i=0;i<num_cols;i++)
        {
            row_terms[i]=0;
        }
        for(i=1;i<num_terms;i++)
        {
            row_terms[a[i].col]++;//记录每行的元素数量
        }
        startingpos[0]=1;
        for(i=1;i<num_cols;i++)
        {
            startingpos[i]=startingpos[i-1]+row_terms[i-1];//转置矩阵第i行开始位置保存在starting_pos[i]中????看不懂!!!!
        }
        for(i=1;i<=num_terms;i++)
        {
            j=startingpos[a[i].col]++;//++运算符的作用?
            b[j].row=a[i].col;
            b[j].col=a[i].row;
            b[j].value=a[i].value;
        }
    }        
}

附上书本原话:转置矩阵第i行元素数量保存在row_terms[i]中,而转置矩阵第i行开始位置保存在starting_pos[i]中。

下面是测试数据:
程序代码:
#define MAX 9
typedef struct {
    int row;
    int col;
    int value;
}term;

term a[MAX]={{6,6,8},{0,0,15},{0,3,22},{0,5,-15},{1,1,11},{1,2,3},{2,3,-6},{4,0,91},{5,2,28}};

下面是打印函数代码:
程序代码:
void prints_matrix_test(term *arry)
{
    int i,j;
    int k=1;
    for(i=0;i<(*arry).col;++i)
    {
        for(j=0;j<(*arry).row;++j)
        {
                while(k<MAX)//通过循环遍历到符合位置的元素并打印 
                {
                    if(i==(*(arry+k)).col&&j==(*(arry+k)).row)
                    {
                        printf("%4d",(*(arry+k)).value);
                        break;
                    }
                    ++k;
                }
                if(k==MAX)
                {
                    printf("%4d",0);
                }
                k=1;//k重置,为下一次循环做准备 
        }
        printf("\n");
    }
}


好久没上论坛了!!!!有点陌生鸟!

[ 本帖最后由 liangjinchao 于 2011-7-30 23:11 编辑 ]
搜索更多相关主题的帖子: 快速 
2011-07-29 00:23
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
沉底了!

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-07-30 21:05
快速回复:【求助】稀疏矩阵的快速转置!
数据加载中...
 
   



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

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