欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Image Compression

程序员文章站 2022-03-12 16:57:26
...

题目

题目大意:有w*w的棋盘,每个方格为1(黑色)或0(白色),若棋盘的黑色格子数目c1(或白色格子c0)占总格子数的比例>=t;将所有格子都变为黑色(白色),否则,将棋盘均分为四个部分,继续进行上述判断;

思路:简单的dfs;

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int w;
double t;
char a[100][100];
void dfs(int x0,int y0,int len)
{
    int xx[4]={0,0,len/2,len/2};
    int yy[4]={0,len/2,0,len/2};
    int c0=0,c1=0;
    for(int i=x0;i<x0+len;i++)
    {
        for(int j=y0;j<y0+len;j++)
        {
            if(a[i][j]=='0')c0++;
            else c1++;
        }
    }
    if(1.0*c0*100/(c0+c1)>=t)
    {
        for(int i=x0;i<x0+len;i++)//计算概率时不要忘乘100
        {
            for(int j=y0;j<y0+len;j++)a[i][j]='0';
        }
    }
    else if(1.0*c1*100/(c0+c1)>=t)
    {
        for(int i=x0;i<x0+len;i++)
        {
            for(int j=y0;j<y0+len;j++)a[i][j]='1';
        }
    }
    else
    {
        for(int p=0;p<4;p++)
            dfs(x0+xx[p],y0+yy[p],len/2);
    }
   
    return ;
}
int main()
{
    int cn=0;
    while(cin>>w)
    {

        if(w==0)break;
        cin>>t;
        for(int i=0;i<w;i++)
        {
            cin>>a[i];//输入用字符串
        }
        dfs(0,0,w);
        cout<<"Image "<<++cn<<":"<<endl;
        for(int i=0;i<w;i++)
        {
            for(int j=0;j<w;j++)
            {
                cout<<a[i][j];
            }
            cout<<endl;
        }
    }
    return 0;
}