c语言解决-分治法在数值问题中的应用—矩阵相乘问题
- 实验题目
设M1和M2是两个n×n的矩阵,设计算法计算M1×M2 的乘积。
2.实验目的
1)提高应用蛮力法设计算法的技能;
2)深刻理解并掌握分治法的设计思想;
3)理解这样一个观点:用蛮力法设计的算法,一般来说,经过适度的努力后,都可以对其进行改进,以提高算法的效率。 - 实验要求
1)设计并实现用BF方法求解矩阵相乘问题的算法;
2)设计并实现用DAC方法求解矩阵相乘问题的算法;
3)以上两种算法的输入既可以手动输入,也可以自动生成;
4)对上述两个算法进行时间复杂性分析,并设计实验程序验证
分析结果;
5)设计可供用户选择算法的交互式菜单(放在相应的主菜单下)。
代码(需自行更改)
代码块语法遵循标准markdown代码,例如:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#define mymalloc malloc
#define myfree free
#define MAXRAND 10
#define MATRIX_NUM 2
#define BF 1
#define ADC 2
struct matrix{
int row_and_col;
int** value;
};
void
init_matrix(struct matrix* m, int is_assign_value){
//给矩阵随机值
m->value = (int **)mymalloc(m->row_and_col*sizeof(int*));
for (int i = 0; i < m->row_and_col; i++){
m->value[i] = (int *)mymalloc(m->row_and_col*sizeof(int));
}
if (is_assign_value){
//是否赋值
for (int j = 0; j < m->row_and_col; j++)
for (int k = 0; k < m->row_and_col; k++)
m->value[j][k] = (int)(rand() % MAXRAND + 1);
}
}
//设置两个矩阵的行和列
int
set_row_col(struct matrix* m, void(*callback)(struct matrix* m,int p)){
if (callback == NULL){
return 0;
}
//改为方阵
m->row_an