uva442 Matrix Chain Multiplication

本文介绍了一个简单的矩阵乘法计算器程序,该程序使用 C 语言实现,能够读取一系列矩阵标识符并计算它们相乘后的结果。文章展示了如何通过栈结构追踪矩阵乘法操作,并计算所需的乘法次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

#define LOCAL
#define MAXN 200

typedef struct elem
{
    char matrix;
    int row;
    int col;
}elem;

typedef struct stackelem
{
    int row;
    int col;
}elemstack;

elem data[26];
elemstack stack[MAXN];

int main()
{
    int n;
    int i;
    char str[2];
    char c;
    int top= -1;
    elemstack temp, a, b;
    int mulcount;
    int error;

    #ifdef LOCAL
        freopen("c://uva_in.txt", "r", stdin);
    #endif

    scanf("%d", &n);

    for (i = 0; i < n; i++)
    {
        scanf("%s%d%d", str, &(data[i].row), &(data[i].col));
        data[i].matrix = str[0];
    }

    fgetc(stdin);
    mulcount = 0;
    error = 0;
    while((c = fgetc(stdin)) != EOF)
    {
        if (c == '/n')
        {
            if (error)
                printf("error/n");
            else
                printf("%d/n", mulcount);

            top = -1;
            mulcount = 0;
            error = 0;
        }
        else if (c != '('&& c != ')')
        {
            for (i = 0; i < n; i++)
            {
                if (data[i].matrix == c)
                {
                    temp.row = data[i].row;
                    temp.col = data[i].col;
                    break;
                }
            }
            stack[++top] = temp;
        } else if (c == ')')
        {
            b = stack[top--];
            a = stack[top--];
            if (a.col == b.row)
            {
                temp.row = a.row;
                temp.col = b.col;
                stack[++top] = temp;
                mulcount += a.row * a.col * b.col;
            } else
                error = 1;
        }
        }




    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值