package main
import (
"fmt"
)
// Multiply rows of A by columns of B.
// Print a 2D array (matrix)
func printMatrix(arr2d [][]int) {
for _, row := range arr2d {
for _, val := range row {
fmt.Printf("%4d", val)
}
fmt.Println()
}
}
// Multiply matrices A and B into C
func multipleMatrix(a, b, c [][]int) {
for i := range c {
for j := range c[i] {
for k := range a[i] {
c[i][j] += a[i][k] * b[k][j]
}
}
}
}
func main() {
// Create matrices
a := [][]int{
{1, 8, 5},
{6, 7, 1},
{8, 7, 6},
}
b := [][]int{
{4, 8, 1},
{6, 5, 3},
{4, 6, 5},
}
// Initialize result matrix C with zeros
c := make([][]int, len(a))
for i := range c {
c[i] = make([]int, len(b[0]))
}
// c[0, 0] = (a[0][0] * b[0][0]) + (a[0][1] * b[1][0]) + (a[0][2] * b[2][0])
printMatrix(a)
fmt.Println()
printMatrix(b)
fmt.Println()
multipleMatrix(a, b, c)
printMatrix(c)
}
/*
run:
1 8 5
6 7 1
8 7 6
4 8 1
6 5 3
4 6 5
72 78 50
70 89 32
98 135 59
*/