UVa201 Squares

来源:互联网 发布:用java打印对称三角形 编辑:程序博客网 时间:2024/05/20 00:17

判断一个正方形点阵图中正方形的个数

有点麻烦,时间复杂度为n^4.目前想到的优化是可以用邻接矩阵做一个,以后再写吧

#include<stdio.h>#include<string.h>int H[10][10];//横边 int V[10][10];//竖边 int main(void) {int sum = 0,n;memset(H,0,sizeof(H));memset(V,0,sizeof(V));FILE *fp = fopen("e4.2.txt","r");int x,y,countH,countV;fscanf(fp,"%d",&n);fscanf(fp,"%d",&countH);for(int i=0;i<countH;i++) {//添加横边 fscanf(fp,"%d %d",&x,&y);H[x-1][y-1] = 1;}fscanf(fp,"%d",&countV);for(int i=0;i<countV;i++) {//添加竖边 fscanf(fp,"%d %d",&x,&y);V[x-1][y-1] = 1;}for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {int edge = i>j?n-i+1:n-j+1;//点到边界的距离 for(int k=1;k<edge;k++) {//判断边长为k的正方形是否存在(最大为edge) int flag = 1;int a = i,b = j;//记录下当前点的位置 while(a<i+k) {//判断竖线if(V[a][b]==0 || V[a][b+k]==0) flag = 0;//判断边是否存在 a++; }a = i;while(b<j+k) {//判断横线if(H[a][b]==0 || H[a+k][b]==0) flag = 0;b++;}if(flag) sum++;}}}printf("%d",sum);}


0 0