比赛 2024暑假C班集训A 评测结果 AWWWAWWWWW
题目名称 牧场的安排 最终得分 20
用户昵称 蜀山鸭梨大 运行时间 0.121 s
代码语言 C++ 内存使用 3.37 MiB
提交时间 2024-07-10 11:23:49
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000000;
int n,m,ans=1,w[4][2]={1,0,0,1,-1,0,0,-1};
struct node{
	int x,y;
};
vector <node> v;
//stack <node> s;
bool a[15][15],b[15][15];
void dfs(int z,int e){
	if(z>=v.size()) return ;
	bool flag=1;
	for(int i=0;i<4;i++){
		int xx=v[z].x+w[i][0],yy=v[z].y+w[i][1];
		if(a[xx][yy]&&b[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=m){
			flag=0;
			break;
		}
	}
	if(flag&&e){
		ans=(ans+1)%mod;
//		cout<<"#"<<v[z].x<<" "<<v[z].y<<" "<<z<<endl;
		b[v[z].x][v[z].y]=1;
		dfs(z+1,e),dfs(z+1,0);
		b[v[z].x][v[z].y]=0;
//		cout<<"%"<<z<<endl;
	}
	if(flag&&!e) dfs(z+1,1);
	if(!flag) dfs(z+1,e);
//	else if(!b[v[z-1].x][v[z-1].y]){
//		dfs(z+1),dfs(z+2);
//	}
//	if(!s.size()||(s.top().x+1!=v[z].x&&s.top().y+1!=v[z].y)||(s.top().x+1==v[z].x&&s.top().y+1==v[z].y)){
//		ans=(ans+1)%mod;
//		s.push(v[z]);
//		dfs(z+1),dfs(z+2);
//		s.pop();	
//	}
//	else  dfs(z+1),dfs(z+2);
	return ;
}
int main(){
	freopen("cowfood.in","r",stdin);
	freopen("cowfood.out","w",stdout);
	cin>>n>>m;
	node aa;
	aa.x=0,aa.y=0;
	v.push_back(aa);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]){
				node ij;
				ij.x=i,ij.y=j;
				v.push_back(ij);
			}
		}
	}
	for(int i=1;i<v.size();i++){
//		cout<<"$"<<i<<endl;
		dfs(i,1);
	}
	cout<<ans;
	return 0;
}