给出2个N * N的矩阵M1和M2,输出2个矩阵相乘后的结果。
Input第1行:1个数N,表示矩阵的大小(2 <= N <= 100)
第2 - N + 1行,每行N个数,对应M1的1行(0 <= M1ii <= 1000)
第N + 2 - 2N + 1行,每行N个数,对应M2的1行(0 <= M2ii <= 1000)Output输出共N行,每行N个数,对应M1 * M2的结果的一行。Sample Input
2
1 0
0 1
0 1
1 0
Sample Output
0 1
1 0
离散里面学到了Warshall算法
也不管简便不简便就直接用了
不过这个算法是用来算传递闭包的,稍微改造了下
列如:
0 0 1 0 0 1
1 0 0 1 0 1
0 1 0 0 1 1 相乘
则先检索第一个数组里的第一竖列 即arr1[i][1] i递增 看此位置是否是1
先假设arr【1】【1】为第一行,,第一列
此图中 i为2时arr1[2][1]为1,即(2,1),
根据传递性,在第二个数组中寻找( 1,x)位置为1的元素
即x=3 ,arr2[1][3]为1,(2,1)(1,3)则传递为(2,3)
于是将arr3空数组中位置为2,3的元素置1,然后再检索第二竖列
,以此类推
0 0 1 0 0 1
1 0 0 1 0 1
0 1 0 0 1 1
(3,2)->(2,1),(2,3)传递成(3,1)(3,3),将arr3[][]对应位置置1。。。。。
此代码将检索1改为检索是否为0
将arr3【】【】中传递的来的元素累加成传递前两个数的乘积