uva442 Matrix Chain Multiplication

来源:互联网 发布:天涯十大悬案 知乎 编辑:程序博客网 时间:2024/05/14 06:24

#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;
}