給出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 00 1
0 11 0
sample output
0 1
1 0
離散裡面學到了warshall演算法
也不管簡便不簡便就直接用了
不過這個演算法是用來算傳遞閉包的,稍微改造了下
列如:0 0 1 0 01
10 0 1 0 1
0 1 0 0 1 1 相乘
則先檢索第乙個陣列裡的第一豎列 即arr1[i][1] i遞增 看此位置是否是1
先假設arr為第一行,,第一列
此圖中 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【】【】中傳遞的來的元素累加成傳遞前兩個數的乘積
#include #include int arr1 [1010][1010];
int arr2 [1010][1010];
int arr3 [1010][1010];
int main()
for(int i=1;i<=n;i++)
for(int x=1;x<=n;x++)
for(int i=1;i<=n;i++)
for(int x=1;x<=n;x++)//第x行,i列,先檢索行}}
}for(int i=1;i<=n;i++) //輸出
printf("\n");
} return 0;
}
Strassen矩陣相乘演算法
strassen的矩陣相乘方法是一種典型的分治演算法。目前為止,我們已經見過一些分治策略的演算法了,例如歸併排序和karatsuba大數快速乘法。現在,讓我再來看看分治策略的背後是什麼。同動態規劃不同,在動態規劃中,為了得到最終的解決方案,我們經常需要把乙個大的問題 展開 為幾個子問題,但是這裡,我...
演算法提高 矩陣相乘
問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象 也很無聊 可惜他的老師正在講這矩陣乘法這一段內容。當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。小明希望你來幫他完成這個任務。現在給你乙個 ai 行 aj 列的矩陣和乙個 bi 行 bj 列的矩陣,要你求出他們相乘的積 當然也是...
演算法導論 矩陣相乘(一)
矩陣的相乘,這個計算方法就直接看下面的原始碼實現 void mul array int a array array size int b array array size int c array array size int size 這個是最暴力的方法,演算法本身就是按照定義來進行計算的,這裡提一...