#include<stdio.h>
#define ROW 3
#define COL 3
#define MAXSIZE 30
int number[MAXSIZE+1], position[MAXSIZE+1];//number数组表示 每一列有几个元素,position数组存放每一列第一个元素在矩阵中的位置
typedef int ElemType;
typedef struct
{
int row,col;
ElemType e;
}Triple;
typedef struct
{
Triple data[MAXSIZE];
int n,m,len;
}Matrix;
void transmatrix(Matrix *A, Matrix *B)
{
int t, j, q;
B->n = A->n;
B->m = A->m;
B->len = A ->len;
printf("hehe\n");
if(A->len)
{
for(t = 1; t <= (A->len); t ++)
{ number[A->data[t].col] ++;
printf("number[%d]:%d",A->data[t].col, number[A->data[t].col]) ;
}
position[1] = 1;
for(t = 2; t <= (A->len); t ++)
position[t] = position[t - 1] + number[t - 1];
for(t =1; t <= (A->len); t++)
{
j = A->data[t].col;
q = position[j];
B->data[q].row = A->data[t].col;
B->data[q].col = A->data[t].row;
B->data[q].e = A->data[t].e;
position[j] ++;
}
}
}
int main()
{
Matrix mat,B;
int array[ROW][COL];
int i = 0, j, k = 0;
int *p = array;
mat.n = ROW;
mat.m = COL;
mat.len = ROW * COL;
printf("ROW number:%d COL number:%d LEN:%d\n",mat.n,mat.m,mat.len);
for(p = array[0]; p <= array[ROW -1] + (COL -1); p ++)//point and array:see array[0] as a one-dementional array, then *p is the address of every elem
{
scanf("%d",p);
}
for(i = 0; i < ROW; i ++)
for(j = 0; j < COL; j ++)//ordinary method
{
printf("%d ",array[i][j]);
k ++;
if(k % COL == 0)
{
printf("\n");
k = 0;
}
}
printf("k = %d\n",k);
k = 1;
printf("hehe\n");
for(i = 0; i < ROW; i ++)
for(j = 0; j < COL; j ++)
{
if(array[i][j] == 0)
continue;
else
{
mat.data[k].row = i + 1;
mat.data[k].col = j + 1;
mat.data[k].e = array[i][j];
printf("k:%d row:%d col:%d e:%d\n ",k, mat.data[k].row, mat.data[k].col, mat.data[k].e);
k ++;
}
}
transmatrix(&mat, &B);
printf("row col e\n");
for(i = 1; i <= k -1; i ++)
printf("%d %d %d\n",B.data[i].row, B.data[i].col, B.data[i].e);
return 0;
}
三元组法 将矩阵转置 并输出转置后的三元组
最新推荐文章于 2022-11-14 15:57:04 发布