yoj87题

 

 

 

#include <stdio.h>

#include <math.h>

int i2;

int x[10002], y[10002], mark[102][102], mark1[102][102], x11[10002], y11[10002];

double R[102][102], G[102][102], B[102][102], R1[102][102], G1[102][102], B1[102][102];

int judge(double x, double y, double z);

int c = 0;

int main()

{

    char r, g, b;

    int n, m;

    scanf("%d %d", &n, &m);

    int i, j, k, l, i1, j1;

    for (i = 0; i < n; i++)

    {

        for (j = 0; j < m; j++)

        {

            scanf(" %c %lf %c %lf %c %lf", &r, &R[i][j], &g, &G[i][j], &b, &B[i][j]);

            if ((R[i][j] == 0) && (G[i][j] == 0) && (B[i][j] == 0))

            {

                x[c] = i;

                y[c] = j;

                mark[i][j] = 1;

                c++;

            }

        }

    }

    k = c;

    if (k == n * m)

    {

        for (i = 0; i < n; i++)

        {

            for (j = 0; j < m; j++)

            {

                printf("%c %0.lf %c %0.lf %c %0.lf ", r, R[i][j], g, G[i][j], b, B[i][j]);

            }

            printf("\n");

        }

    }

    else

    {

        while (1)

        {

            int p = 0;

            for (i = 0; i < c; i++)

            {

                double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                if (mark[x[i]][y[i]] && (!mark[x[i] + 1][y[i]] || !mark[x[i] - 1][y[i]] || !mark[x[i]][y[i] + 1] || !mark[x[i]][y[i] - 1])) //确定第几轮 ,因为是按顺序更新像素,每一轮更新的像素要储存到新的数组中,否则会影响下一个像素的条件判断

                {                                                                                                                           

                    if (x[i] == 0 && y[i] == 0)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] + 1][y[i]], G[x[i] + 1][y[i]], B[x[i] + 1][y[i]]))

                        {

                            r1 += R[x[i] + 1][y[i]];

                            g1 += G[x[i] + 1][y[i]];

                            b1 += B[x[i] + 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] + 1], G[x[i]][y[i] + 1], B[x[i]][y[i] + 1]))

                        {

                            r1 += R[x[i]][y[i] + 1];

                            g1 += G[x[i]][y[i] + 1];

                            b1 += B[x[i]][y[i] + 1];

                            c1++;

                        }

                        if (c1 != 0) //除数不能为零,以下同理

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (x[i] == n - 1 && y[i] == 0)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] - 1][y[i]], G[x[i] - 1][y[i]], B[x[i] - 1][y[i]]))

                        {

                            r1 += R[x[i] - 1][y[i]];

                            g1 += G[x[i] - 1][y[i]];

                            b1 += B[x[i] - 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] + 1], G[x[i]][y[i] + 1], B[x[i]][y[i] + 1]))

                        {

                            r1 += R[x[i]][y[i] + 1];

                            g1 += G[x[i]][y[i] + 1];

                            b1 += B[x[i]][y[i] + 1];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (x[i] == 0 && y[i] == m - 1)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] + 1][y[i]], G[x[i] + 1][y[i]], B[x[i] + 1][y[i]]))

                        {

                            r1 += R[x[i] + 1][y[i]];

                            g1 += G[x[i] + 1][y[i]];

                            b1 += B[x[i] + 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] - 1], G[x[i]][y[i] - 1], B[x[i]][y[i] - 1]))

                        {

                            r1 += R[x[i]][y[i] - 1];

                            g1 += G[x[i]][y[i] - 1];

                            b1 += B[x[i]][y[i] - 1];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (x[i] == n - 1 && y[i] == m - 1)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] - 1][y[i]], G[x[i] - 1][y[i]], B[x[i] - 1][y[i]]))

                        {

                            r1 += R[x[i] - 1][y[i]];

                            g1 += G[x[i] - 1][y[i]];

                            b1 += B[x[i] - 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] - 1], G[x[i]][y[i] - 1], B[x[i]][y[i] - 1]))

                        {

                            r1 += R[x[i]][y[i] - 1];

                            g1 += G[x[i]][y[i] - 1];

                            b1 += B[x[i]][y[i] - 1];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (x[i] == 0 && y[i] != 0 && y[i] != m - 1)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] + 1][y[i]], G[x[i] + 1][y[i]], B[x[i] + 1][y[i]]))

                        {

                            r1 += R[x[i] + 1][y[i]];

                            g1 += G[x[i] + 1][y[i]];

                            b1 += B[x[i] + 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] + 1], G[x[i]][y[i] + 1], B[x[i]][y[i] + 1]))

                        {

                            r1 += R[x[i]][y[i] + 1];

                            g1 += G[x[i]][y[i] + 1];

                            b1 += B[x[i]][y[i] + 1];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] - 1], G[x[i]][y[i] - 1], B[x[i]][y[i] - 1]))

                        {

                            r1 += R[x[i]][y[i] - 1];

                            g1 += G[x[i]][y[i] - 1];

                            b1 += B[x[i]][y[i] - 1];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (x[i] == n - 1 && y[i] != 0 && y[i] != m - 1)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] - 1][y[i]], G[x[i] - 1][y[i]], B[x[i] - 1][y[i]]))

                        {

                            r1 += R[x[i] - 1][y[i]];

                            g1 += G[x[i] - 1][y[i]];

                            b1 += B[x[i] - 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] + 1], G[x[i]][y[i] + 1], B[x[i]][y[i] + 1]))

                        {

                            r1 += R[x[i]][y[i] + 1];

                            g1 += G[x[i]][y[i] + 1];

                            b1 += B[x[i]][y[i] + 1];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] - 1], G[x[i]][y[i] - 1], B[x[i]][y[i] - 1]))

                        {

                            r1 += R[x[i]][y[i] - 1];

                            g1 += G[x[i]][y[i] - 1];

                            b1 += B[x[i]][y[i] - 1];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (y[i] == 0 && x[i] != 0 && x[i] != n - 1)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] - 1][y[i]], G[x[i] - 1][y[i]], B[x[i] - 1][y[i]]))

                        {

                            r1 += R[x[i] - 1][y[i]];

                            g1 += G[x[i] - 1][y[i]];

                            b1 += B[x[i] - 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] + 1], G[x[i]][y[i] + 1], B[x[i]][y[i] + 1]))

                        {

                            r1 += R[x[i]][y[i] + 1];

                            g1 += G[x[i]][y[i] + 1];

                            b1 += B[x[i]][y[i] + 1];

                            c1++;

                        }

                        if (judge(R[x[i] + 1][y[i]], G[x[i] + 1][y[i]], B[x[i] + 1][y[i]]))

                        {

                            r1 += R[x[i] + 1][y[i]];

                            g1 += G[x[i] + 1][y[i]];

                            b1 += B[x[i] + 1][y[i]];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else if (y[i] == m - 1 && x[i] != 0 && x[i] != n - 1)

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c1 = 0;

                        if (judge(R[x[i] - 1][y[i]], G[x[i] - 1][y[i]], B[x[i] - 1][y[i]]))

                        {

                            r1 += R[x[i] - 1][y[i]];

                            g1 += G[x[i] - 1][y[i]];

                            b1 += B[x[i] - 1][y[i]];

                            c1++;

                        }

                        if (judge(R[x[i]][y[i] - 1], G[x[i]][y[i] - 1], B[x[i]][y[i] - 1]))

                        {

                            r1 += R[x[i]][y[i] - 1];

                            g1 += G[x[i]][y[i] - 1];

                            b1 += B[x[i]][y[i] - 1];

                            c1++;

                        }

                        if (judge(R[x[i] + 1][y[i]], G[x[i] + 1][y[i]], B[x[i] + 1][y[i]]))

                        {

                            r1 += R[x[i] + 1][y[i]];

                            g1 += G[x[i] + 1][y[i]];

                            b1 += B[x[i] + 1][y[i]];

                            c1++;

                        }

                        if (c1 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c1);

                            G1[x[i]][y[i]] = ceil(g1 / c1);

                            B1[x[i]][y[i]] = ceil(b1 / c1);

                        }

                    }

                    else

                    {

                        double r1 = 0, g1 = 0, b1 = 0, c2 = 0;

                        if (judge(R[x[i] - 1][y[i]], G[x[i] - 1][y[i]], B[x[i] - 1][y[i]]))

                        {

                            r1 += R[x[i] - 1][y[i]];

                            g1 += G[x[i] - 1][y[i]];

                            b1 += B[x[i] - 1][y[i]];

                            c2++;

                        }

                        if (judge(R[x[i]][y[i] - 1], G[x[i]][y[i] - 1], B[x[i]][y[i] - 1]))

                        {

                            r1 += R[x[i]][y[i] - 1];

                            g1 += G[x[i]][y[i] - 1];

                            b1 += B[x[i]][y[i] - 1];

                            c2++;

                        }

                        if (judge(R[x[i] + 1][y[i]], G[x[i] + 1][y[i]], B[x[i] + 1][y[i]]))

                        {

                            r1 += R[x[i] + 1][y[i]];

                            g1 += G[x[i] + 1][y[i]];

                            b1 += B[x[i] + 1][y[i]];

                            c2++;

                        }

                        if (judge(R[x[i]][y[i] + 1], G[x[i]][y[i] + 1], B[x[i]][y[i] + 1]))

                        {

                            r1 += R[x[i]][y[i] + 1];

                            g1 += G[x[i]][y[i] + 1];

                            b1 += B[x[i]][y[i] + 1];

                            c2++;

                        }

                        if (c2 != 0)

                        {

                            R1[x[i]][y[i]] = ceil(r1 / c2);

                            G1[x[i]][y[i]] = ceil(g1 / c2);

                            B1[x[i]][y[i]] = ceil(b1 / c2);

                        }

                    }

                    if (R1[x[i]][y[i]] || G1[x[i]][y[i]] || B1[x[i]][y[i]])

                    {

                        mark1[x[i]][y[i]] = 0;

                        k--;

                        x11[p] = x[i];

                        y11[p] = y[i];

                        p++;

                    }

                }

            }

            for (i2 = 0; i2 < p; i2++) //一轮更新完毕后,将本轮更新的数赋值到原数组(注意,数值和判断数组mark都要用新数组储存)

            {

                mark[x11[i2]][y11[i2]] = mark1[x11[i2]][y11[i2]];

                R[x11[i2]][y11[i2]] = R1[x11[i2]][y11[i2]];

                B[x11[i2]][y11[i2]] = B1[x11[i2]][y11[i2]];

                G[x11[i2]][y11[i2]] = G1[x11[i2]][y11[i2]];

            }

            if (k == 0)

                break;

        }

        for (i = 0; i < n; i++)

        {

            for (j = 0; j < m; j++)

            {

                printf("%c %0.lf %c %0.lf %c %0.lf ", r, R[i][j], g, G[i][j], b, B[i][j]);

            }

            printf("\n");

        }

    }

    return 0;

}

int judge(double x, double y, double z)

{

    if (x || y || z)

        return 1;

    else

        return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值