矩阵

C++中将二维数组作为参数的函数

醉酒当歌 提交于 2020-02-08 13:15:43
将一个二维数组作为参数传递到函数中,函数原型中该参数应定义为(列数为4的int类型二维数组): int (*a)[4]; //true int a[][4]; //true int *a[4]; //false 对上述代码的理解:将[]与前面的类型结合,第一行首先定义了一个指针a,它指向一个有4个int元素的数组,而在另外的博客里我们说过,[]基本可以和*等价,故第二种表示方法也是可以的。而第三行表示的意义则完全不同,它定义了一个包含4个int*类型的数组,即数组中的每一个元素都是一个指向int类型的指针。 由于在定义函数原型的时候,我们在定义表示数组的指针时,已经将二维数组的列数传递给函数了,因此我们只需要将行数作为另一个函数的参数传递即可,函数可以接受任何行数的数组,但只能接受定义时指定了列数的数组。 在这里const要慎用,因为这里已经是间接关系了,容易出现错误,详细的关于const和指针见另一篇博客。 来源: CSDN 作者: Xiaaaaaacy 链接: https://blog.csdn.net/Nemoosi/article/details/104219612

LeetCode——542. 01 矩阵

我们两清 提交于 2020-02-08 13:09:11
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 0 0 0 示例 2: 输入: 0 0 0 0 1 0 1 1 1 输出: 0 0 0 0 1 0 1 2 1 注意: 给定矩阵的元素个数不超过 10000。 给定矩阵中至少有一个元素是 0。 矩阵中的元素只在四个方向上相邻: 上、下、左、右。 一 我们可以首先遍历一次矩阵,将值为0的点都存入queue,将值为1的点改为INT_MAX。然后开始BFS遍历,从queue中取出一个数字,遍历其周围四个点,如果越界或者周围点的值小于等于当前值加1,则直接跳过。因为周围点的距离更小的话,就没有更新的必要,否则将周围点的值更新为当前值加1,然后把周围点的坐标加入queue,参见代码如下: 解法一: class Solution { public: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m = matrix.size(), n = matrix[0].size(); vector<vector<int>> dirs{{0,-1},{-1,0},{0,1},{1,0}}; queue<pair<int, int

基础训练—矩阵乘法C语言 & C++ & JAVA(给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如:A = 1 2 3 4 A的2次幂  7 10  15 22 输入格式   第一)

吃可爱长大的小学妹 提交于 2020-02-08 09:12:19
问题描述 矩阵乘法 给定一个N阶矩阵A,输出A的M次幂(M是非负整数)   例如:   A =   1 2   3 4   A的2次幂   7 10   15 22 输入格式   第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数   接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值 输出格式   输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开 样例输入 2 2 1 2 3 4 样例输出 7 10 15 22 直接代码呈上:C语言 //注释里面有解释 # include <stdio.h> # include <string.h> # define N 100 int A [ N ] [ N ] , t [ N ] [ N ] , r [ N ] [ N ] ; int main ( ) { int n , m , i , j , k ; scanf ( "%d%d" , & n , & m ) ; //输入矩阵的阶数和幂次数 for ( i = 0 ; i < n ; i ++ ) for ( j = 0 ; j < n ; j ++ ) scanf ( "%d" , & A [ i ] [ j ] ) ; //输入矩阵 for ( i = 0 ; i < n ; i ++ ) r [ i

二维数组

别来无恙 提交于 2020-02-08 09:02:34
题目:程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:数组的行数,数组的列数,每一行的元素, (用逗号分开)每一个数字都是有符号32位整数,行数和列数都是正整数。 1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.FileWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.util.ArrayList; 8 import java.util.List; 9 import java.util.Scanner; 10 public class shuzu2 { 11 public static void main(String[] args)throws IOException 12 { 13 List<Integer> list=new ArrayList<>(); 14 Scanner scan=new Scanner(System.in); 15 int x=1; 16 while(x!=0) 17 { 18 System.out.println("请执行操作:1

剑指Offer刷题总结

半世苍凉 提交于 2020-02-08 03:42:46
1、二维数组中的查找 题目描述:   在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 仔细观察,找规律。 可以从左下角(右上角)开始查找。若当前的数小于目标值,则向右(向下)一个数继续查找;若当前的数大于目标值,则向上(向左)一个数继续查找;等于就不用说了。 代码实现: // 从左下角开始查找 public static boolean Find ( int target , int [ ] [ ] array ) { int row = array . length - 1 ; int col = 0 ; while ( row >= 0 && col <= array [ 0 ] . length - 1 ) { if ( array [ row ] [ col ] == target ) return true ; if ( array [ row ] [ col ] > target ) row -- ; else col ++ ; } return false ; } 2、替换空格 题目描述:   请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy

CCF201503-1图像旋转(C语言)

北慕城南 提交于 2020-02-08 02:12:40
题目 问题描述   旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。   计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式   输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。   接下来n行每行包含m个整数,表示输入的图像。 输出格式   输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定   1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。 注意点 二维数组1000*1000的定义放在main函数中会出错,而放在外面变成全局变量则正常。(疑惑??) C语言实现的源代码(100分) # include <stdio.h> int matrix [ 1000 ] [ 1000 ] ; int main ( ) { int n , m , i , j ; scanf ( "%d %d" , & n , & m ) ; for ( i = 0 ; i < n ; i ++ ) for ( j = 0 ; j < m ; j ++ ) scanf ( "%d" , & matrix [ i ] [ j ] ) ; for ( j = 0 ; j < m ; j +

基础练习 回形取数

一世执手 提交于 2020-02-08 01:11:37
问题描述   回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。 输入格式   输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。 输出格式   输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6 3 2 5 样例输入 3 2 1 2 3 4 5 6 样例输出 1 3 5 6 4 2 #include <stdio.h> #include <cstring> int main(){ int m,n; scanf("%d%d",&m,&n); int num[205][205]; memset(num,-1,sizeof(num));//数组初始化 for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ scanf("%d",&num[i][j]); } } int sum=0,x=-1,y=0; while(sum<m*n){ while(x+1<m&&num[x+1][y]!=-1){//向下读数 printf("%d ",num[++x][y]); num[x][y]=-1; sum++; } while

CCF201503-1图像旋转

我的梦境 提交于 2020-02-07 22:11:59
问题描述   旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。   计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式   输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。   接下来n行每行包含m个整数,表示输入的图像。 输出格式   输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 样例输入 2 3 1 5 3 3 2 4 样例输出 3 4 5 2 1 3 评测用例规模与约定   1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。 解题思路:用二维数组存储矩阵,旋转前m行n列,旋转之后n行m列,仔细思考旋转之后的坐标变换即可解答。 #include<iostream> using namespace std; const int N = 1000; int info[N][N]; int main16() { int n, m;//图像的行数和列数 cin >> n; cin >> m; //int info[1000][1000];//这样定义下面无法访问,需要将其定义在函数外 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> info[i][j]; } } /

matlab 基础

旧街凉风 提交于 2020-02-07 21:12:43
说明:用matlab语言编写的程序,称为M文件。M文件分为脚本文件和函数文件,扩展名均为.m。 注释:%注释文本 不等号:~= 它是一个易用的一元函数绘图函数 。特别是在绘制含有符号变量的函数的图像时,ezplot要比 plot 更方便。因为plot绘制图形时要指定自变量的范围,而ezplot无需数据准备,直接绘出图形。 Inf:∞无穷大 Nan:not a number不是数 符号说明 逗号:用来将矩阵中的行元素分开。(可用空格代替) 分号:用来将矩阵中的行分开。(可用回车键代替) 中括号[]:界定数组的首与尾。 小括号():表示指定的元胞。 大括号{}:表示元胞的内容。 冒号:相当于文字中的省略号。 数组 行数组:A=[1,2,3,4] 列数组:A=[1;2;3;4] 矩阵:A=[1,2,3;4,5,6;7,8,9] 创建数组 zeros(m) m阶全零方阵 zeros(m,n) m×n阶全零方阵 ones(m) m阶全1方阵 ones(m,n) m×n阶全1方阵 eye(m) m阶单位阵 定步长 生成法: x=a:t:b,t是步长,省略是为1。 定数 线性采样法: x=linspace(a,b,n),a与b是数组的第一个和最后一个元素,n是采样的总点数。 注意:1、 生成的都是行向量 2、linspace(a,b,n) 与 a:(b-a)/(n-1):b 等价 选取数组 A(

matlab 常用函数

牧云@^-^@ 提交于 2020-02-07 21:08:51
rand() 函数用于生成取值在(0~1)之间的均匀分布的伪随机数 主要语法: rand(n): 生成n*n的伪随机数矩阵 rand(m,n): 生成m*n的伪随机数矩阵 rand(m,n,'double'): 生成m*n的双精度伪随机数矩阵 rand(m,n,'single'): 生成m*n的单精度伪随机数矩阵 randn()函数用于生成标准正态分布的伪随机数(均值为0,方差为1) randi()函数用于生成均匀分布的伪随机整数 主要语法: randi(imax,1)或randi(imax): 生成在[ 1 ~imax]之间的1*1的伪随机 整数 randi(imax,n): 生成在[ 1 ~imax]之间的n*n的伪随机 整数 矩阵 randi(imax,m,n)或randi(imax,m,n): 生成在[ 1 ~imax]之间的m*n的伪随机 整数 矩阵 randi([imin,imax],m,n): 生成在[imin~imax]之间的m*n的伪随机 整数 矩阵 R = unifrnd(imin,imax) 生成在[imin~imax]之间的1*1的伪随机数 R = unifrnd(imin,imax,[m,n]) 生成在[imin~imax]之间的m*n的伪随机数矩阵 R= unidrnd(imax,m,n) 生成在[ 1 ~imax]之间的m*n的伪随机 整数 矩阵 A