矩阵在计算机中表示就是二维数组。这部分内容都是有关二维数组和矩阵相关的题目。 ## 二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 ``` int exist_inmatrix(int *matrix,int rows,int cols,int num); ``` ## 矩阵中最大的二维矩阵 求一个矩阵中最大的二维矩阵(元素和最大).如: ``` 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 ``` 中最大的是: ``` 4 5 5 3 ``` 要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码 ``` int max_sum_submatrix(int *matrix,int rows,int cols,int *tmatrix,int *trows,int tcols) ``` ## 顺时针打印矩阵 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:如果输入如下矩阵: ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ``` 则依次打印出数字`1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10` 。 分析:包括Autodesk、EMC在内的多家公司在面试或者笔试里采用过这道题。 一圈一圈打印,第一圈origin是(0,0),第二圈是(1,1) ``` void print_matrix(int **matrix,int rows,int cols); //或 void print_matrix(int *matrix,int rows,int cols); ``` 示例代码: ``` void print_matrix(int *matrix,int rows,int cols){ if(matrix==NULL) return ; if(rows<=0 || cols<=0) return; int start = 0; while(start*2=start;i--){ printf("\d ",matrix[start*rows+i]); } for(int i=endY-1;i>start;i--){ printf("\d ",matrix[i*rows+start]); } } ``` 测试代码见 print_matrix.c ## 从小到大输出矩阵的值 思路1:采用归并进行排序然后进行顺序打印 思路2:用n个指针指向每一行的第一个数,比较n个指针的数,打印最小的,然后指针后移,若无下一位,则赋值为null,直至所有数都对印完毕 ``` void printArry(int *a,int rows,int columns) { if(a==null) return; int *arr=new int[rows*(columns+1)];//添加看门狗值,INT_MAX for(int i=0;iarr[index]) { min=arr[index]; mini=i; } } if(min==INT_MAX) break;//表示都达到了看门处,则跳出循环。 cout<