当前位置: 首页 > article >正文

【01游戏——DFS】

题目

代码

#include <bits/stdc++.h>
using namespace std;

const int N = 11;

int n;
char g[N][N];
char ng[N][N];
bool Find = false;

bool check(int x, int y) //只用查最新的坐标相关的数据
{
	//连续长度不能超过2
	if(x - 2 >= 1 && ng[x][y] == ng[x-1][y] && ng[x-1][y] == ng[x-2][y]) return false;
	if(y - 2 >= 1 && ng[x][y] == ng[x][y-1] && ng[x][y-1] == ng[x][y-2]) return false;
	
	//数量各一半 && 不能相同
	if(x == n)
	{
		int cnt = 0;
		for(int i = n; i; i--)
			if(ng[i][y] == '1')
				cnt++;
		if(cnt != n / 2) return false;
		
		for(int j = y-1; j; j--)
		{
			int k = 1;
			for(; k <= n; k++)
				if(ng[k][j] != ng[k][y]) break;
			if(k > n) return false;
		}
	}
	
	if(y == n)
	{
		int cnt = 0;
		for(int j = n; j; j--)
			if(ng[x][j] == '1')
				cnt++;
		if(cnt != n / 2) return false;
		
		for(int i = x-1; i; i--)
		{
			int k = 1;
			for(; k <= n; k++)
				if(ng[i][k] != ng[x][k]) break;
			if(k > n) return false;
		}
	}
	return true;
}
void print()
{
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
			cout << ng[i][j];
		cout << '\n';
	}
}
void dfs(int x, int y)
{
	if(Find) return; //找到唯一解,结束
	if(y > n) {x++, y = 1;} //合法化坐标
	if(x > n) //结束搜索,立马输出
	{
		Find = true;
		print();
		return;
	}
	
	if(g[x][y] == '_')
	{
		ng[x][y] = '0';
		if(check(x, y))
			dfs(x, y+1);
		ng[x][y] = '1';
		if(check(x, y))
			dfs(x, y+1);
	}
	else
	{
		ng[x][y] = g[x][y];
		if(check(x, y))
			dfs(x, y+1);
	}
}
int main()
{
	ios::sync_with_stdio(0); cin.tie(0);
	
	cin >> n;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= n; j++)
			cin >> g[i][j];
	
	dfs(1, 1);
}


http://www.kler.cn/a/565453.html

相关文章:

  • Linux驱动学习(四)--字符设备注册
  • 工作中遇到的EXCEL小问题:多行有间隔符的合并
  • 广东GZ033-任务E:数据可视化(15 分)-用柱状图展示销售金额最高的6 个月
  • Golang适配达梦数据库连接指定模式
  • Yolo各个系列的模型、ResNet、Pyrimid network、VGG、PointNet、mobilenet模型
  • kafka小白基础知识
  • Leetcode2296:设计一个文本编辑器
  • RabbitMQ系列(七)基本概念之Channel
  • 在MacOS上打造本地部署的大模型知识库(一)
  • Springboot 事件通知监听
  • WebSocket相关技术
  • vue2版本elementUI的table分页实现多选逻辑
  • 【AHK】资源管理器自动化办公实例/自动连点设置
  • JavaScript系列(86)--现代构建工具详解
  • 论文阅读:A comprehensive survey on model compression and acceleration
  • Node.js技术原理分析系列——Node.js的perf_hooks模块作用和用法
  • Oracle 19c静默安装并手动创建数据库
  • 泛型的约束有哪几种?(C#)
  • Linux 下使用tracepath进行网络诊断分析
  • Prometheus2.53.3 | 监控系统安装与配置指南(已成功安装)