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

uva201 squares

程序员文章站 2022-03-30 09:00:58
...

连线数正方形问题,题意很简单

简单模拟

延伸那块写的有点问题,有点毛躁,交了很多次

#include <iostream>
#include<string>
#include<string.h>
#include<algorithm>
#include<limits>
#include<stdio.h>
#include<stdlib.h>

using namespace std;
//每个顶点往右下搜
//矩阵存的是【0】与右边是否有边,【1】与下是否有边
int num[10];
int maze[11][11][2];
void initia(){
    memset(num,0,sizeof(num));
    memset(maze,0,sizeof(maze));
}
void print(){
    bool f=false;
    for(int i=1;i<=9;i++){
        if(num[i]==0)continue;
        f=true;
        cout<<num[i]<<" square (s) of size "<<i<<endl;
    }
    if(!f)cout<<"No completed squares can be found."<<endl;


}
int main()
{
    int N,M,a,b,n=1;
    char c;
    while(cin>>N>>M){
        initia();
        for(int i=0;i<M;i++){
        cin>>c;
        cin>>a>>b;
        if(c=='H'){
            maze[a][b][0]=1;
        }else if(c=='V'){
            maze[b][a][1]=1;
        }
        }
//一开始下面这一部分没想清楚,忘记了上下左右有4条边
        for(int i=1;i<=N;i++){
            for(int j=1;j<=N;j++){
                if(maze[i][j][0]==0||maze[i][j][1]==0)continue;
                for(int k=1;k<=N-max(i,j);k++){
                    if(maze[i+k-1][j][1]==0||maze[i][j+k-1][0]==0)break;
                    bool ff=false;
                    for(int p=0;p<k;p++){
                        if(maze[i+p][j+k][1]==0||maze[i+k][j+p][0]==0)ff=true;
                    }
                    if(ff)continue;
                    if(maze[i+k][j][0]==1&&maze[i][j+k][1]==1){
                        num[k]++;
                    }
                }
            }
        }
        if(n!=1)cout<<endl<<"**********************************"<<endl<<endl;
        cout<<"Problem #"<<n<<endl<<endl;
        n++;
        print();
    }



    return 0;
}