1 条题解

  • 0
    @ 2025-4-17 22:00:51

    先将输入矩阵处理为标识性的中间矩阵,再把中间矩阵转化为输出

    #include <iostream>
    #include <memory.h>
    #include <stdlib.h>
    using namespace std;
    
    int a[25][25];
    int b[25][25];
    char *c;
    void display(int m,int n){
        for(int i = 0; i < m; i++)
            {
                for(int j = 0;j < n; j++)
                    cout << b[i][j]<<" ";
                cout<<endl;
            }
    }
    void vmark(int i,int j,int m,int n){
        b[i][j] = -2;
        //display(m,n);
        if(i>0 && b[i-1][j]!=-2 && a[i-1][j]<0)
            vmark(i-1,j,m,n);
        if(i<m-1 && b[i+1][j]!=-2 && a[i+1][j]<0)
            vmark(i+1,j,m,n);
        if(j>0 && b[i][j-1]!=-2 && a[i][j-1]<0)
            vmark(i,j-1,m,n);
        if(j<n-1 && b[i][j+1]!=-2 && a[i][j+1]<0)
            vmark(i,j+1,m,n);
    }
    int main(){
        int m,n,i,j,q,s,f,ti,tj;
        int g = 0;
        while(cin>>m>>n)
        {
            
            if(m == 0 || n == 0)
                break;
            int d = (m*3+1)*(n*5+1);
            c = new char[d];
            memset(c,' ',sizeof(char)*d);
            memset(a,0,sizeof(int)*625);
            memset(b,0,sizeof(int)*625);
            for(i = 0; i < m; i++)
            {
                for(j = 0;j < n; j++)
                {    
                    cin >> a[i][j];
                    if(a[i][j] == 1)
                        a[i][j] = -1;
                }
            }
            q = 1;//数字 
            for(i = 0; i < m; i++)
            {
                for(j = 0; j < n; j++){
                    if(a[i][j] < 0)
                    {
                        if(i==0 || j==0 || j==n-1 || i==m-1){
                            if(b[i][j] != -2)
                                vmark(i,j,m,n);
                        }
                        else
                            if(b[i][j] != -2)
                                b[i][j] = -1;
                    }
                    else{
                        if((i==0 || a[i-1][j]<0) && i+1!=m && a[i+1][j]==0){
                            b[i][j]=q;q++;
                        }
                        else if((j==0 || a[i][j-1]<0) && j+1!=n && a[i][j+1]==0){
                            b[i][j]=q;q++;
                        }
                    }
                }
                    
            }
            for(i = 0; i < m; i++)
            {
                for(j = 0;j < n; j++)
                {    
                    if(b[i][j] == -2)
                        continue;
                    else if(b[i][j] == -1){
                        ti = i*3;
                        tj = j*5;
                        for(s=0; s<4; s++)
                        {
                            for(f=0; f<6; f++)
                            {
                                c[(ti+s)*(5*n+1)+tj+f] = '+';
                            }
                        }
                    }
                    else if(b[i][j] >= 0){
                        ti = i*3;
                        tj = j*5;
                        for(f=0; f<6; f++)
                        {
                            c[(ti+0)*(5*n+1)+tj+f] = '+';
                            c[(ti+3)*(5*n+1)+tj+f] = '+';
                        }
                        for(s=0; s<4; s++)
                        {
                            c[(ti+s)*(5*n+1)+tj+0] = '+';
                            c[(ti+s)*(5*n+1)+tj+5] = '+';
                        }
                        if(b[i][j] > 0)
                        {
                            int k = b[i][j] / 10;
                            c[(ti+1)*(5*n+1)+tj+3] = b[i][j] % 10 + '0';
                            c[(ti+1)*(5*n+1)+tj+2] = k % 10 + '0';
                            c[(ti+1)*(5*n+1)+tj+1] = k / 10 + '0';
                        }
                    }
                }
            }
            for(i=0; i<m*3+1; i++){
                for(j=n*5;j>=0;j--){
                    if(c[i*(5*n+1)+j]!=' ')
                        break;
                }
                for(s=0;s<=j;s++){
                    cout<<c[i*(5*n+1)+s];
                }
                cout<<endl;
            }
                cout<<endl;cout<<endl;
        }
        return 0;
    }
    • 1

    信息

    ID
    375
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者