矩阵链乘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵链乘相关的知识,希望对你有一定的参考价值。

                        矩阵链乘之结构体构造函数

struct构造函数,和构造函数的重载函数长这个样子,和C++的构造函数差不过。

struct Dog {
    Dog()
    {
        name = "wangwang";
        age = 10;
    }
    string name;
    int age;
};
struct Dog {
    Dog()
    {
        name = "Ao di";
        age = 2;
    }
    Dog(string n)
    {
        name = n;
        age = 10;
    }
    Car(string n, int c)
    {
        name = n;
        age = c;
    }
    string name;
    int age;
};

 

 

下面这个厉害了:

struct Dog {
    Dog(string n = "Lihao", int c = 10) : name(n), age(c) {} //name = n, age = c
    string name;
    int age;
};

这种构造函数非常好用。如果你只是想初始化一些变量。

 

 

结合uva442的AC代码,看看这种用法。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<string>
using namespace std;
#define maxn 30

struct matrix{
    int a, b;
    matrix(int a=0, int b=0) :a(a), b(b){} //神奇的构造函数。
}mat[maxn];


int main()
{
    int m;
    cin >> m;
    for (int i = 0; i < m; i++){
        char name;
        cin >> name;
        cin >> mat[name - A].a >> mat[name - A].b;
    }
    
    char exp[200];
    stack<matrix> s;
    while (cin >> exp){
        int len = strlen(exp);
        bool error = false;
        int ans = 0;
        for (int i = 0; i < len; i++){
            if (exp[i] >= A&&exp[i] < Z)
                s.push(mat[exp[i] - A]);
            else if (exp[i] == )){
                matrix m1 = s.top(); s.pop();
                matrix m2 = s.top(); s.pop();
                if (m2.b != m1.a) { error = true; break; }
                ans += m2.a*m1.a*m1.b;
               s.push(matrix(m2.a, m1.b));//初始化之后,系统会生成一个指向该结构体的地址。
            }
        }
        if (error) cout << "error" << endl;
        else cout << ans << endl;
    }
    return 0;
}

 

以上是关于矩阵链乘的主要内容,如果未能解决你的问题,请参考以下文章

矩阵链乘

矩阵链乘问题

矩阵最优链乘及Java实现

矩阵链乘

UVa 442 矩阵链乘

矩阵链乘(Matrix Chain Multiplication)