苍翠的松林里,几只乌鸦,几滴血。。。
查看原帖
苍翠的松林里,几只乌鸦,几滴血。。。
658786
STUDENT00楼主2022/11/4 22:36

40分求助!

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
bool vis[10][10],flag;
void dfs(int now){
	if(flag) return;
	if(now==ans){
		flag=1;
		return;
	}
	for(register int i=1;i<=n;i++){
		for(register int j=1;j<=m;j++){
			if(j>1&&j<n&&i<m-1&&!vis[i][j-1]&&!vis[i][j]&&!vis[i][j+1]&&!vis[i+1][j]&&!vis[i+2][j]){
				vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i+1][j]=vis[i+2][j]=1;
				dfs(now+1);
				vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i+1][j]=vis[i+2][j]=0;
			}
			if(i>1&&i<n&&j<m-1&&!vis[i-1][j]&&!vis[i][j]&&!vis[i+1][j]&&!vis[i][j+1]&&!vis[i][j+2]){
				vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j+1]=vis[i][j+2]=1;
				dfs(now+1);
				vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j+1]=vis[i][j+2]=0;
				if(flag) return;
			}
			if(j>1&&j<n&&i>2&&!vis[i][j-1]&&!vis[i][j]&&!vis[i][j+1]&&!vis[i-1][j]&&!vis[i-2][j]){
				vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i-1][j]=vis[i-2][j]=1;
				dfs(now+1);
				vis[i][j-1]=vis[i][j]=vis[i][j+1]=vis[i-1][j]=vis[i-2][j]=0;
				if(flag) return;
			}
			if(i>1&&i<n&&j>2&&!vis[i-1][j]&&!vis[i][j]&&!vis[i+1][j]&&!vis[i][j-1]&&!vis[i][j-2]){
				vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j-1]=vis[i][j-2]=1;
				dfs(now+1);
				vis[i-1][j]=vis[i][j]=vis[i+1][j]=vis[i][j-1]=vis[i][j-2]=0;
				if(flag) return;
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(ans=1;;ans++){
		flag=0;
		dfs(0);
		if(!flag){
			ans--;
			break;
		}
	}
	printf("%d",ans);
	return 0;
}
2022/11/4 22:36
加载中...