Untitled

 avatar
unknown
plain_text
2 years ago
2.4 kB
4
Indexable
#include <iostream>
using namespace std;
int a[100][100];
int save[100][100];
int vis[100][100];
int vis1[100][100];
int dem[6];
int n;
int qx[10000000];
int qy[10000000];
int qd[10000000];
int f;
int r;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
void push(int x,int y){
	r++;
	qx[r]=x;
	qy[r]=y;
//qd[r]=z;
}
void pop(int &x,int &y){
	f++;
	x=qx[f];
	y=qy[f];
	//dis=qd[f];
}
void check(){
	
	int x,y;
	int flag=0;
	for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			if(a[i][j]==0&&vis[i][j]==0){
				for(int i=1; i<=5;i++){
					dem[i]=0;
				}
				flag++;
				f=r=-1;
				x=i;
				y=j;
				push(x,y);
				vis[x][y]=flag;
	while(f!=r){
		pop(x,y);
		for(int i=0;i<4; i++){
			int xx=x+dx[i];
			int yy=y+dy[i];
			if(xx>=0&&xx<n&&yy>=0&&yy<n){
				if(a[x][y]==0){
					if(a[xx][yy]==0&&vis[xx][yy]!=flag) {
						push(xx,yy);
						vis[xx][yy]=flag;
					}
					else if(vis[xx][yy]!=flag&&save[xx][yy]!=0){
						push(xx,yy);
						vis[xx][yy]=flag;
						dem[a[xx][yy]]++;
					}
				}
				else{
					if(a[xx][yy]==a[x][y]&&vis[xx][yy]!=flag&&save[xx][yy]!=0){
						push(xx,yy);
						vis[xx][yy]=flag;
						dem[a[xx][yy]]++;
					}
				}
			}
		}
	}
	int max=0;
		for(int i=1; i<6; i++){
			if(max<dem[i]) max=dem[i];
		}
		int doi;
		for(int i=1; i<6; i++){
			if(max==dem[i]) doi=i;
		}
		for(int i=0;i<n;i++){
			for(int j=0; j<n;j++){
				if(a[i][j]==0&&vis[i][j]==flag) a[i][j]=doi;
			}
		}
			}
		}
	}
}
int demvung(){
	
	int dem=0;
	for(int i=0;i<n; i++){
		for(int j=0; j<n;j++){
			if(vis1[i][j]==0){
				dem++;
				f=r=-1;
				int x=i;
				int y=j;
				vis[x][y]=1;
				push(x,y);
				while(f!=r){
					pop(x,y);
					for(int i=0; i<4; i++){
						int xx=x+dx[i];
						int yy=y+dy[i];
						if(xx>=0&&xx<n&&yy>=0&&yy<n){
							if(a[xx][yy]==a[x][y]&&vis1[xx][yy]==0){
								push(xx,yy);
								vis1[xx][yy]=1;
							}
						}
					}
				}
			}
		}
	}
	return dem;
}

int main(){
//freopen("input.txt","r",stdin);
	int t;
	cin>>t;
	for (int tc=1; tc<=t;tc++){
		cout<<"Case #"<<tc<<endl;
		cin>>n;
		for(int i=0;i<n;i++){
			for(int j=0; j<n;j++){
				cin>>a[i][j];
				save[i][j]=a[i][j];
				vis[i][j]=0;
				vis1[i][j]=0;
			}
		}
		
		check();
		int kq=demvung();
		cout<<kq<<endl;
	}
	return 0;
}
Editor is loading...