RC-v6 拼瓷砖(测试点5未过T_T)

RC-v6 拼瓷砖(测试点5未过T_T)_第1张图片

 RC-v6 拼瓷砖(测试点5未过T_T)_第2张图片

#include 
#include 
#include 
#define maxn 13000
using namespace std;
int N,M,lmax=1,H=1;     //墙的高和宽  
char arr[maxn][maxn];//存储单位面积方块颜色字符 

void bfs(int i,int j){
	char start=arr[i][j];
	if(arr[i][j+1]!=start||j+1>M||arr[i][j+1]=='#')return;
	else{
		lmax++;
		bfs(i,j+1);
	}
}
void dfs(int i,int j){
	char start=arr[i][j];
	if(arr[i+1][j]!=start||i+1>N||arr[i+1][j]=='#')return;
	else{
		H++;
		dfs(i+1,j);
	}
}
int creat(int x,int y){
	bfs(x,y);//先宽搜找到相同颜色字符长度最大lmax 
	//从y+lmax-1下标开始往下搜得到H如果H=y;i--){
		dfs(x,i);
		if(H>N>>M;
	
	for(int i=0;i>arr[i][j];
		}
	}
	
	//找到最合适的瓷砖填充
	//从起点下标0,0开始(x行y列) 
	int x=0,y=0,S=0;//结束循环标志S=N*M;S代表已经填充的面积
	mapm;//统计不同种瓷砖amount
	
	while(S!=N*M){
		string temp="";
		temp+=arr[x][y];
		
		int Len=creat(x,y);//自定义一个函数creat返回最合适的瓷砖边长L
		S+=pow(Len,2); 
		
		string length_Len=to_string(Len); 
		temp+=length_Len;
		//cout<::iterator it=m.begin();it!=m.end();it++){
		string a=it->first;
		int size_num=0;
		for(int i=1;isecond);
	}
	return 0;
}

 T_T找不出来why????RC-v6 拼瓷砖(测试点5未过T_T)_第3张图片

 

你可能感兴趣的:(深度优先,算法,图论)