⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matrix_mult.cpp

📁 矩阵链的相乘的源代码
💻 CPP
字号:
#pragma warning(disable:4786)
#include <vector> 
#include <algorithm>
#include <iostream.h>
using namespace std; 

#define N 5
//int x[N + 1] = {2,8,7,3,5,6};
int x[N + 1] = {3,2,4,5,6,1};
int m[N][N];
int flag[N][N];

int init (int m[N][N], int n);
int run ();
int show_x (int x[N + 1], int n)
{
	int i;
	for (i = 0; i < n + 1; i++)
	{
		printf ("%d ", x[i]);
	}
	printf ("\n");

	return 0;
}
int show_flag (int m[N][N], int n)
{
	printf ("\n");
	int i;
	int j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			printf ("%3d ", m[i][j]);
		}
		printf ("\n");
	}
	
	return 0;
}

int main (void)
{
	show_x (x, N);
	init (m, N);
	run ();
	show_flag (m, N);
	show_flag (flag, N);

	return 0;
}
int run ()
{
	int i;
	int j;
	int k;
	int r;
	int chart;
	int min;
	int bound;
	for (k = 0; k < N; k++)
	{
		for (i = 1; i < N - k + 1; i++)
		{
			j = i + k;
			printf ("m[%d][%d] ", i, j);
			if (i == j)
			{
				m [i - 1][j - 1] = 0;
				continue;
			}
			chart = m[i - 1][i - 1] + m[i + 1 - 1][j - 1] \
				     + x[i - 1] * x[i + 1 - 1] * x[j];
			min = chart;
			bound = i;
			m[i - 1][ j - 1] = chart;
			for (r = i + 1; r < j; r++)
			{
				//printf ("m[%d][%d]", i, r);
				//printf ("m[%d][%d]  ", r + 1,j);
				chart = m[i - 1][r - 1] + m[r + 1 - 1][j - 1] \
					     + x[i - 1] * x[r + 1 - 1] * x[j];
				if (chart < min)
				{
					min = chart;
					bound = r;
					m[i - 1][ j - 1] = chart;
				}
			}
			flag[i - 1][j - 1] = bound;
			printf ("bound = %d \n", bound);
		}
		printf ("\n");
	}
	
	return 0;
}
int init (int m[N][N], int n)
{
	int i;
	int j;
	for (i = 0; i < n; i++)
	{
		m[i][i] = 0;
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
		{
			m[i][j] = 0;
		}
		printf ("\n");
	}
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -