思路:
三元结构体数组将分别存储 行, 列,值
将行列交换
对交换后的行进行排序
typedef
struct Node {
int row; // 行
int col; // 列
int data;
}Node;
void initList(Node *, int);
int inputList(Node *, int[][3],int,int);
void printList(Node *, int);
void transpositionList(Node *, int, int[][5]);
void transpositionList(Node * list,int);
void sort(Node * , int);
void printArray(int r,int c,int [][5]);
void intiArray(int r, int c, int[][5]);
void printArray(int r,int c,int [][5]);
int main(void)
{
int arr[5][3] = { {0,0,1},
{2,0,0},
{0,3,0},
{4,0,0},
{5,0,0}};
Node list[5 * 3];
initList(list, 15);
int len = inputList(list, arr,5,3);
printList(list, len);
transpositionList(list,len);
printList(list,len);
int transpositionArray[3][5];
intiArray(3,5,transpositionArray);
transpositionList(list,len, transpositionArray);
printArray(3,5,transpositionArray);
return 0;
}
void initList(Node * list, int n)
{
int i;
for (i = 0; i < n; i++) {
list[i].col = 0;
list[i].row = 0;
list[i].data = 0;
}
}
int inputList(Node * list, int a[][3],int row,int col)
{
int count = 0;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (a[i][j] != 0)
{
list[count].row = i;
list[count].col = j;
list[count++].data = a[i][j];
}
}
}
return count;
}
void printList(Node * list, int n)
{
for (int i = 0; i < n; i++)
{
cout << list[i].row << " " << list[i].col << " " << list[i].data << endl;
}
cout << endl;
}
void transpositionList(Node * list, int n, int a[][5])
{
for (int i = 0; i < n; i++)
{
a[list[i].row][list[i].col] = list[i].data;
}
cout << endl;
}
void transpositionList(Node * list,int len)
{
for (int i = 0; i < len; i++)
{
int tmp = list[i].row;
list[i].row = list[i].col;
list[i].col = tmp;
}
printList(list, len);
sort(list, len);
}
void sort(Node * list, int len)
{
for (int i = 1; i < len; i++)
{
for (int j = 0; j < len - i; j++)
{
if (list[j].row > list[j + 1].row)
{
Node tmp = list[j];
list[j] = list[j + 1];
list[j + 1] = tmp;
}
}
}
}
void intiArray(int r, int c, int a[][5])
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
a[i][j] = 0;
}
}
}
void printArray(int r, int c, int a[][5])
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
cout << endl;
}