import java.util.ArrayList;
import java.util.List;
public class MatrixDemo {
// 找出二维矩阵中为0元素的所有集合
public static List<Posiztion> findZero(int a[][]) {
List<Posiztion> list = new ArrayList<Posiztion>();
int row = a.length;
int col = a[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (a[i][j] == 0) {
Posiztion p = new Posiztion();
p.setX(i);
p.setY(j);
list.add(p);
}
}
}
return list;
}
// 将矩阵中的为0的元素的行与列全部替换为0
public static int[][] replaceZero(int a[][]) {
int b[][] = a;
List<Posiztion> l = findZero(a);
for (int i = 0; i < l.size(); i++) {
Posiztion p = l.get(i);
int x = p.getX();
int y = p.getY();
for (int j = 0; j < a.length; j++) {
b[j][y] = 0;
}
for (int k = 0; k < a[0].length; k++) {
b[x][k] = 0;
}
}
return b;
}
// 打印二维矩阵的函数
public static void printMatrix(int a[][]) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int a[][] = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 0 }, { 0, 1, 2, 3, 4 } ,{1,2,3,4,5}};
List<Posiztion> l = findZero(a);
System.out.println("The position of zero are:");
for (int i = 0; i < l.size(); i++) {
System.out.println("(" + l.get(i).getX() + "," + l.get(i).getY()
+ ")");
}
System.out.println("Before replace the Matrix is:");
printMatrix(a);
System.out.println("After replace the Matrix is:");
int b[][] = replaceZero(a);
printMatrix(b);
}
}
// 定义一个类,用来存放为0元素的位置,x代表在哪行,y代表在哪列
class Posiztion {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
运行结果:
The position of zero are:
(1,4)
(2,0)
Before replace the Matrix is:
1 2 3 4 5
1 2 3 4 0
0 1 2 3 4
1 2 3 4 5
After replace the Matrix is:
0 2 3 4 0
0 0 0 0 0
0 0 0 0 0
0 2 3 4 0
分享到:
相关推荐
在计算机图形学中,三维变换和投影是两个关键概念,它们用于将三维物体表示到二维屏幕上。本资源包聚焦于“三维变换算法”和“三维坐标转换二维算法”,主要涉及C和C++语言实现。接下来,我们将深入探讨这些概念及其...
这将创建一个新的二维矩阵B,它包含了原三维矩阵A在第三维度上的第二个切片。 若想从任意位置提取数据并改变顺序,可以使用线性索引。线性索引是一种将多维索引转换为单一索引的方法,特别适合在不连续的位置提取...
这个压缩包“一个二维矩阵算法,并行计算环境.rar”显然包含了用于处理二维矩阵问题的源代码,具体来说是qr.c文件,这通常代表了一个用C语言实现的QR分解算法。 QR分解是一种线性代数中的矩阵分解方法,它将一个...
在计算机视觉领域,图像通常被表示为二维矩阵,其中每个元素代表图像中的一个像素值。在C++中,我们可以利用OpenCV库来高效地读取和处理图像。OpenCV(Open Source Computer Vision Library)是一个强大的跨平台...
在二维图像处理中,图像可以被视为一个二维矩阵,每个元素代表像素值。OMP算法通过迭代方式逐步选择最相关的原子(在图像中,可能对应于某些基或滤波器),构建一个近似的稀疏表示。 以下是使用MATLAB实现二维图像...
首先,上三角矩阵是一个二维数组,其中主对角线(从左上角到右下角的线)下方的所有元素都是0。这种矩阵在解决线性代数问题、计算系统中的线性方程组等场景中十分有用。例如,当我们想要存储和处理一个系统中部分...
### C经典算法之多维矩阵转一维矩阵 在计算机科学与编程领域中,矩阵是一种常用的数据结构。尤其是在科学计算、图像处理、机器学习等领域,矩阵的应用极为广泛。有时为了提高程序运行效率或是减少内存占用空间,...
二维MUSIC(Multiple Signal Classification,多信号分类)算法是一种基于空间谱估计的信号检测与参数估计方法,广泛应用于雷达、通信和地球物理等领域。在Matlab环境下,我们可以利用其强大的矩阵运算和图形用户...
代码功能:高光谱图像导入matlab预处理,转化为二维矩阵,进行处理,对于初学者应该很有用,可用于遗传算法进行波段选择。思路可看https://blog.csdn.net/obsession54666/article/details/103025780
这个"二维矩阵旋转90 demo"示例很可能是一个Java程序,它演示了如何将一个二维矩阵顺时针或逆时针旋转90度。下面我们将详细讨论这个主题。 首先,二维矩阵可以被视为一个二维数组,它由行和列组成。例如,一个3x3的...
二维离散傅里叶变换(2D Discrete Fourier Transform,简称2D DFT)是数字信号处理中的一个重要概念,主要用于分析图像或矩阵数据的频域特性。它将图像或矩阵的时域(空间域)表示转换为频域表示,揭示了数据在不同...
实验的参考程序框架中,给出了如何将二维矩阵转换为一维稀疏矩阵存储结构的函数原型,以及如何进行加法和减法运算的函数原型。需要注意的是,文档中的程序代码片段并不完整,例如CreateMatrix、MatrixAdd、MatrixSub...
**二维DCT** 是在一维DCT的基础上扩展到二维矩阵,常用于图像处理。二维DCT分为两种类型:正交型和共轭对称型。对于一个 \( N \times N \) 的矩阵 \( X \),正交型二维DCT可以表示为: \[ X_{u,v} = \sum_{m=0}^{N-...
在图论中,一个图是由顶点和边组成的,邻接矩阵是一种表示图的方式,它用一个二维数组来表示图中任意两个顶点之间是否存在边。可达矩阵则是用来表示图中所有顶点对是否可以直接通过边相连,即从一个顶点是否有路径...
这可以通过创建一个包含三列的二维数组或动态分配的结构体数组来实现,每行代表一个三元组。 2. **初始化转置矩阵**:创建一个新的空三元组列表用于存储转置后的稀疏矩阵。转置矩阵的行和列将与原矩阵的列和行互换...
二维ROOT-MUSIC(Root Multiple Signal Classification)算法是一种在信号处理领域广泛应用的方向-of-arrival (DOA)估计技术,尤其在雷达、通信和音频处理等场景中。它基于谱估计理论,能够有效地寻找多个同时发射源...
本文将深入探讨如何使用Java语言实现矩阵转换算法,并为Java初学者提供一个学习实例。矩阵是由有序数组构成的矩形,通常用大括号{}表示,其元素是数字或变量。矩阵的操作主要包括加法、乘法、转置和逆矩阵等。 1. *...
对于一个有向图,关联矩阵通常是一个二维的0-1矩阵,行代表顶点,列代表边。如果某条边从顶点i指向顶点j,则矩阵中第i行第j列的元素为1,否则为0。关联矩阵不包含自环(即顶点到自身的边),因此如果图中有自环,...
在C++中,将一个二维数组转换为矩阵的过程不仅有助于更好地理解数据结构,还能有效提高程序的性能与可读性。 #### 代码解析 本示例展示了如何使用C++实现将两个二维数组(模拟矩阵)进行相乘并存储到另一个二维...
1. 定义矩阵类(Matrix):包含二维数组表示矩阵元素,以及矩阵的行数和列数。 2. 函数实现:如`swapRows()`用于行交换,`scaleRow()`用于行缩放,`addScaledRow()`用于行加法。 3. `rref()`函数:这是主要的函数,...