求dalao帮忙看看!
查看原帖
求dalao帮忙看看!
418419
ko_no_lzx_da楼主2021/7/21 10:29
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
char a[100][100];
int book[100][100];
int n;
int bookh[1000][1000];
int ans=0;
int x[4]={0,0,1,-1};
int y[4]={1,-1,0,0};
bool up(int idx,int idy){
	int t=idx;
	do{
		t--;
//		cout <<t<<endl;
		if(book[t][idy]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t>=0);
//	cout <<"ok"<<endl;
	return true; 
}
bool down(int idx,int idy){
	int t=idx;
	do{
		t++;
//		cout <<t<<endl;
		if(book[t][idy]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t<n);
//	cout <<"ok"<<endl;
	return true; 
}
bool left(int idx,int idy){
	int t=idy;
	
	do{
		t--;
//		cout <<t<<endl;
		if(book[idx][t]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t>=0);
//	cout <<"ok"<<endl;
	return true; 
}
bool right(int idx,int idy){
	int t=idy;

	do{
		t++;
//		cout <<t<<endl;
		if(book[idx][t]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t<n);
//	cout <<"ok"<<endl;
	return true; 
}
bool zs(int idx,int idy){
	int t=idx;
	int t1=idy;
	do{
		t--;
		t1--;
//		cout <<t<<endl;
		if(book[t][t1]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t>=0&&t1>=0);
//	cout <<"ok"<<endl;
	return true; 
}
bool ys(int idx,int idy){
	int t=idx;
	int t1=idy;
	
	do{
		t--;
		t1++;
//		cout <<t<<endl;
		if(book[t][t1]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t>=0&&t1<n);
//	cout <<"ok"<<endl;
	return true; 
}
bool yx(int idx,int idy){
	int t=idx;
	int t1=idy;
	
	do{
		t++;
		t1++;
//		cout <<t<<endl;
		if(book[t][t1]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t<n&&t1<n);
//	cout <<"ok"<<endl;
	return true; 
}
bool zx(int idx,int idy){
	int t=idx;
	int t1=idy;
	
	do{
		t++;
		t1--;
//		cout <<t<<endl;
		if(book[t][t1]==1){
//			cout <<"ok"<<endl;
			return false;
		}
	}while(t<n&&t1>=0);
//	cout <<"ok"<<endl;
	return true; 
}
int jn=0;
void dfs(int idx,int idy,int pre){
//	int m=0;
//	if(pre==n){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				cout <<book[i][j]<<" ";
			}
			cout <<endl;
		} 
		cout <<endl;
//		cout <<endl<<pre<<endl;
//		pre--;
//		ans++; 
//		return;
//	
//	}
		
	for(int i=0;i<4;i++){
//		cout <<endl;
		int dx=idx+x[i];
		int dy=idy+y[i];
		if(dx<0||dy<0||dx>=n||dy>=n)continue;
		if(book[dx][dy]==0&&a[dx][dy]=='*'){
			book[dx][dy]=2;	
			if(up(dx,dy)&&down(dx,dy)&&left(dx,dy)&&right(dx,dy)&&zx(dx,dy)&&zs(dx,dy)&&ys(dx,dy)&&yx(dx,dy)){
				book[dx][dy]=1;
				if(jn<=4)bookh[dx][dy]=1;
				jn++;
				pre++;
			}
			dfs(dx,dy,pre);
			if(book[dx][dy]==1){
				pre--;
			}
			book[dx][dy]=0;
		}
	}
}
int main(){
	cin >>n;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			cin >>a[i][j];
		}
	}
	dfs(0,0,0);
	cout <<ans;
	return 0;
}
2021/7/21 10:29
加载中...