| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 820 人关注过本帖
标题:关于稀疏矩阵三元组转置求助
取消只看楼主 加入收藏
幻景7
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-22
收藏
 问题点数:0 回复次数:1 
关于稀疏矩阵三元组转置求助
对于下面这个程序的转置,当我输入列数不等于行数是似乎总会出错,不知道什么原因 ,下面是包含了两种转置方法的,当仅仅针对于一种转置时,若列数大于行数会出错

#include<stdio.h>
#define N 100
typedef struct
{
int row,col;
int e;
}Triple;
typedef struct
{
Triple data[N+1];
int m,n,len;
}TSMatrix;

void Display(int row,int col,TSMatrix matrix);
void TransposeTSMatrix(TSMatrix A,TSMatrix *B);
void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B);

void main()
{
TSMatrix matrix,matrix2,matrix3;
int i,c,r;
printf("colnumber:");
scanf("%d",&matrix.m);
printf("rownumber:");
scanf("%d",&matrix.n);
printf("is not 0 number:");
scanf("%d",&matrix.len);
printf("putin the row,col,value of not 0 :\n");
for(i=1;i<=matrix.len;i++)
{
scanf("%d%d%d",&matrix.data[i].row,&matrix.data[i].col,&matrix.data[i].e);
}
printf("putin colnumber,rownumber you want to lookup:");
scanf("%d%d",&c,&r);
Display(c,r,matrix);
TransposeTSMatrix(matrix,&matrix2);
printf("after trans:\n");
for(i=1;i<=matrix2.len;i++)
{
printf("row%d col%d %d\n",matrix2.data[i].row,matrix2.data[i].col,matrix2.data[i].e);
}
FastTransposeTSMatrix(matrix2,&matrix3);
printf("after sectrans:\n");
for(i=1;i<=matrix3.len;i++)
{
printf("row%d col%d %d\n",matrix3.data[i].row,matrix3.data[i].col,matrix3.data[i].e);
}
}

void Display(int row,int col,TSMatrix matrix)
{
int i,k=1,flag=1;
for(i=1;i<=matrix.m*matrix.n;i++)
{
if(matrix.data[i].row==row && matrix.data[i].col==col)
{
printf("row%d col%d:%d\n",row,col,matrix.data[k].e);
flag=0;
}
k++;
}
if(flag)
printf("row%d col%d:0\n",row,col);
}

void TransposeTSMatrix(TSMatrix A,TSMatrix *B)
{
int i,j,k;
B->m=A.n;B->n=A.m;B->len=A.len;
if(B->len>0)
{
j=1;
for(k=1;k<=A.n;k++)
for(i=1;i<=A.len;i++)
if(A.data[i].col==k)
{
B->data[j].row=A.data[i].col;
B->data[j].col=A.data[i].row;
B->data[j].e=A.data[i].e;
j++;
}
}
}
void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B)
{
int col,t,p,q;
int num[N],position[N];
B->m=A.n;B->n=A.m;B->len=A.len;
if(B->len)
{
for(col=1;col<A.n;col++)
num[col]=0;
for(t=1;t<=A.len;t++)
num[A.data[t].col]++;
position[1]=1;
for(col=2;col<=A.n;col++)
position[col]=position[col-1]+num[col-1];
for(p=1;p<=A.len;p++)
{
col=A.data[p].col;
q=position[col];
B->data[q].row=A.data[p].col;
B->data[q].col=A.data[p].row;
B->data[q].e=A.data[p].e;
position[col]++;
}
}
}
搜索更多相关主题的帖子: 三元 TSMatrix int 矩阵 void 
2008-05-03 20:16
幻景7
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-3-22
收藏
得分:0 
终于知道问题出哪里了
2008-05-16 19:06
快速回复:关于稀疏矩阵三元组转置求助
数据加载中...
 
   



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

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