矩阵

1126: 布尔矩阵的奇偶性

感情迁移 提交于 2020-03-09 06:54:36
1126: 布尔矩阵的奇偶性 时间限制: 1 Sec 内存限制: 128 MB 提交: 6369 解决: 2109 [状态] [讨论版] [提交] [命题人:admin] 题目描述 一个布尔方阵具有奇偶均势特性,当且仅当 每行、每列总和为偶数,即包含偶数个1。如下面这个4*4的矩阵就具有奇偶均势特性: 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 编写程序,读入一个n阶方阵并检查它是否具有奇偶均势特性。如果没有,你的程序应当再检查一下它是否可以通过修改一位(把0改为1,把1改为0)来使它具有奇偶均势特性;如果不可能,这个矩阵就被认为是破坏了。 输入 第一行是一个整数n ( 0< n < 100 ),代表该方阵的阶数。然后输入n 行,每行n个整数(0或1)。 输出 如果矩阵是布尔矩阵,输出“OK”;如果能通过只修改该矩阵中的一位来使它成为布尔矩阵,则输出“Change bit(i,j)”,这里i和j是被修改的元素的行与列(行,列号从0开始);否则,输出“Corrupt”。 样例输入 Copy 4 1 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 样例输出 Copy OK # include <stdio.h> int a [ 100 ] [ 100 ] ; int judge ( int b [ 100 ] [ 100 ] , int n ) {

1125: 上三角矩阵的判断

跟風遠走 提交于 2020-03-08 22:59:27
1125: 上三角矩阵的判断 时间限制: 1 Sec 内存限制: 128 MB 提交: 6923 解决: 4248 [状态] [讨论版] [提交] [命题人:admin] 题目描述 编写程序,输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,如果a是上三角矩阵,输出“YES”,否则,输出“NO”。 上三角矩阵即主对角线以下(不包括主对角线)的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。 要求定义函数IsUpperTriMatrix()判断矩阵a是否是上三角矩阵,如果是返回1,否则返回0。函数原型如下: int IsUpperTriMatrix(int a[][N], int n); 输入 输入一个正整数n(1<=n<=10)和n阶方阵a中的元素,均为整数。 输出 如果a是上三角矩阵,输出“YES”,否则,输出“NO” 样例输入 Copy 4 1 2 3 4 0 2 2 2 0 0 3 4 # include <stdio.h> int a [ 100 ] [ 100 ] ; int IsUpperTriMatrix ( int n ) { int i , j ; for ( i = 1 ; i < n ; i ++ ) { for ( j = 0 ; j < i ; j ++ ) { if ( a [ i ] [ j ] != 0 ) return ( 0 )

矩阵中的路径、机器人路径-------DFS

二次信任 提交于 2020-03-08 22:23:49
Q1:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径。 [["a","b","c","e"], ["s","f","c","s"], ["a","d","e","e"]] 分析:深度优先搜索遍历 递归参数:i,j:行列索引;k:目标字符串的索引 递归终止条件:1、数组越界。2、字符不匹配。3、当前元素已被访问过-------false 若字符全部匹配,k==len(word)---------------true class Solution: def exist(self, board: List[List[str]], word: str) -> bool: #访问标记数组 visited = [[0]*len(board[0]) for x in range(len(board))] def dfs(k,i,j): #递归终止条件 if k==len(word): return True res = False if 0<=i<len(board) and 0<=j<len(board[0]) and board[i][j]==word[k] and

C语言--指针与多维数组的关系

╄→尐↘猪︶ㄣ 提交于 2020-03-08 20:58:34
人之所以痛苦,那是因为你在成长 。--------magic_guo 多维数组,在某种意义上讲,是数组的数组的数组…。 比如二维数组,相当于数组的数组,即在一维数组的基础上,建立的另一个一维数组。 一维数组和指针的关系是:数组名代表数组中首元素的地址,而在多维数组中也是这样。 只不过多维数组的数组名和一维数组的名,值是一样的,但意义不同。 下面的一切都以二维数组为例: 例如: a = {{1, 2, 3, 4}, {5, 6, 7, 8, 9}, {10, 11, 12, 13}} 二维数组的数组名 a 相当于排长,而二维数组中一维数组的数组名{ a[0], a[1], a[2] }相当于班长。 所以当a指向的是二维数组的首元素地址,a[0]也指向二维数组的首元素地址。但是它们两个的站位不同,也就是含义不同。 所以也就不难来理解为什么a[0]+1 和 *(a+0)+1都是&a[0][1]了。 理解了这个关键点,下面来理解另一个定义: 代码: # include <stdio.h> // 一个班三个学生,各学四门学科, 计算总平均分数以及第n个学生的成绩 int main ( void ) { void average ( float * p , int n ) ; void search ( float ( * p ) [ 4 ] , int n ) ; float a [ 3 ]

leetcode菜狗入门 | 54. 螺旋矩阵

岁酱吖の 提交于 2020-03-08 19:36:43
螺旋矩阵 题目描述 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入 : [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] 输出 : [ 1 , 2 , 3 , 6 , 9 , 8 , 7 , 4 , 5 ] 示例 2: 输入 : [ [ 1 , 2 , 3 , 4 ] , [ 5 , 6 , 7 , 8 ] , [ 9 , 10 , 11 , 12 ] ] 输出 : [ 1 , 2 , 3 , 4 , 8 , 12 , 11 , 10 , 9 , 5 , 6 , 7 ] 解题思路 确定每次行走路线的上下左右边界,每次走完一个方向更新方向,如果各边的关系不满足上大于下,左小于右,break 代码 class Solution { public : vector < int > spiralOrder ( vector < vector < int >> & matrix ) { if ( matrix . empty ( ) || matrix [ 0 ] . empty ( ) ) return { } ; vector < int > ans ; int m = matrix . size ( ) , n = matrix [ 0 ] . size ( )

利用全卷积网络进行车道识别

五迷三道 提交于 2020-03-08 18:12:08
预先训练好的VGG-16网络 https://gist.github.com/baraldilorenzo/07d7802847aaad0a35d3 VGG 16http://www.robots.ox.ac.uk/~vgg/research/very_deep/ 代码实现 https://github.com/mengli/MachineLearning/blob/master/self_driving/road_seg/convnet.py 我们再把4 \times 4的输入特征展成16 \times 1的矩阵X: 那么输出矩阵Y=CX则是一个 4 × 1 4 \times 1 4 × 1 的输出特征矩阵,把它重新排列成$2 \times 2的输出特征就得到最终的结果,通过上述的分析,我们可以看到卷积操作可以表示为和矩阵C相乘,那么反卷积操作就是和矩阵C的转置C^T相乘。因此,反卷积操作也被称为转置卷积操作(transposed convolutional layer)。 下图所示的是参数为 i ′ = 2 , k ′ = 3 , s ′ = 1 , p ′ = 2 i'=2, k'=3, s'=1, p'=2 i ′ = 2 , k ′ = 3 , s ′ = 1 , p ′ = 2 的反卷积操作,其对应的卷积操作参数为 i = 4 , k = 3 , s = 1 , p =

Leetcode-85. Maximal Rectangle

倖福魔咒の 提交于 2020-03-08 01:10:52
公众号不定期发布一篇关于Leetcode解题技巧的文章,尝试从多角度、不同方法对题目进行解析。欢迎大家关注! 题目描述(困难难度) 给一个只有 0 和 1 的矩阵,输出一个最大的矩形的面积,这个矩形里边只含有 1。 解法一 暴力破解 参考 这里 ,遍历每个点,求以这个点为矩阵右下角的所有矩阵面积。如下图的两个例子,橙色是当前遍历的点,然后虚线框圈出的矩阵是其中一个矩阵。 怎么找出这样的矩阵呢?如下图,如果我们知道了以这个点结尾的连续 1 的个数的话,问题就变得简单了。 1.首先求出高度是 1 的矩形面积,也就是它自身的数,如图中橙色的 4,面积就是 4。 2.然后向上扩展一行,高度增加一,选出当前列最小的数字,作为矩阵的宽,求出面积,对应上图的矩形框。 3.然后继续向上扩展,重复步骤 2。 按照上边的方法,遍历所有的点,求出所有的矩阵就可以了。 以橙色的点为右下角,高度为 1。 高度为 2。 高度为 3。 public class Maximal_Rectangle2 { public static int maximalRectangle ( char [ ] [ ] matrix ) { if ( matrix . length == 0 ) { return 0 ; } //保存以当前数字结尾的连续 1 的个数 int [ ] [ ] width = new int [

matlab路径规划系列

依然范特西╮ 提交于 2020-03-08 00:46:30
前言:本博客将结合常用的路径规划算法进行matlab讲解。 一、路径规划问题所需操作 1.生成地图 告诉电脑你的当前地图环境。比如一个迷宫。这里面就涉及一些图像处理的内容,以及如何把地图转换为matlab数据 例子: 有一张原始地图: 现在要将这图片导入matlab中,转换为matlab数据: x=imread('zhousan.png'); 此时生成一个3维矩阵x,格式为372 * 494 * 3。其中372 * 494代表这张图每个像素点的坐标,3表示每个像素点的颜色。 注意:彩色图为三维矩阵,而黑白图为由0,1构成的二维矩阵,0为黑,1为白色 。因此,为方便处理,接下来需要将图片变为黑白,也就是二值化处理。函数为: map=im2bw(x,0.9); //其中x为读入的三维图像数据,0.9为阈值,调整0.9可以改变黑白的效果。此时生成二维黑白图像数据map,格式为372 * 494 此时用 imshow(map) 函数展示效果效果为: 注意:imshow();函数用于将图像矩阵数据显示出图片来,里面可以为三维矩阵,也可以为二维矩阵 接下来,我们希望海洋部分为白色,陆地为黑色,因为方便在海上画线,所以我们要将黑白对调。前面我们提过map数据里面为0,1,0为黑,1为白色。所以我们只需将0.1取逻辑反即可,即 map=~map; 然后再用 imshow(map)

线性代数:矩阵的逆

倖福魔咒の 提交于 2020-03-07 22:17:45
关于矩阵的逆有很多性质和定理,例如,可逆矩阵一定是方阵、满秩矩阵、非奇异矩阵,可逆矩阵的行列式的值不为零等等。在证明一个矩阵是不可逆矩阵时,Strang教授讲了一种几何的思路: 矩阵不可逆的证明 根据可逆矩阵的定义,如果方阵 A ∗ B = I \mathbf{A} * \mathbf{B}=\mathbf{I} A ∗ B = I ,则 A \mathbf{A} A 和 B \mathbf{B} B 互称逆矩阵。下面是一个二维不可逆矩阵的例子,有矩阵 A = [ 1 2 2 4 ] \mathbf{A}=\begin{bmatrix}1&2\\2&4\end{bmatrix} A = [ 1 2 ​ 2 4 ​ ] ,如果 A \mathbf{A} A 可逆,则有 [ 1 2 2 4 ] ∗ B = [ 1 0 0 1 ] \begin{bmatrix}1&2\\2&4\end{bmatrix} * \mathbf{B}=\begin{bmatrix}1&0\\0&1\end{bmatrix} [ 1 2 ​ 2 4 ​ ] ∗ B = [ 1 0 ​ 0 1 ​ ] ,对矩阵 [ 1 2 2 4 ] \begin{bmatrix}1&2\\2&4\end{bmatrix} [ 1 2 ​ 2 4 ​ ] 中的两个列向量作某种线性组合会得到列向量 [ 1 0 ] \begin

【java】矩阵对角线求和

拈花ヽ惹草 提交于 2020-03-07 21:58:04
矩阵对角线求和 题目描述 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7 import java . util . Scanner ; public class Main { public static void main ( String [ ] args ) { Scanner input = new Scanner ( System . in ) ; int [ ] [ ] a = new int [ 3 ] [ 3 ] ; int i , j ; for ( i = 0 ; i < 3 ; i ++ ) { for ( j = 0 ; j < 3 ; j ++ ) { a [ i ] [ j ] = input . nextInt ( ) ; } } int sum1 = 0 , sum2 = 0 ; for ( i = 0 ; i < 3 ; i ++ ) { sum1 += a [ i ] [ i ] ; sum2 += a [ i ] [ 2 - i ] ; } System . out . println ( sum1 + " " + sum2 ) ; } } 来源: CSDN 作者: weixin_46014378 链接: https://blog.csdn.net