【无向图找环】网格树

题目

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
const int maxn = 2e5 + 5;
const int inf = 1e9 + 5;using namespace std;int n, m;
//int pre[maxn];
int a[30][30], b[30][30];int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};bool hascycle;
bool vis[30][30];
int ind[30][30];void dfs(int x, int y, int px, int py){//dfs找无向图的环:记录前驱结点,若后继结点已经访问过且不是前驱结点,说明找到了环if(hascycle) return;
// 	if(x < 0 || x > n - 1 || y < 0 || y > m - 1 || a[x][y] == 0) return;for(int i = 0; i < 4; i++){int mx = x + dx[i], my = y + dy[i];if(mx < 0 || mx > n - 1 || my < 0 || my > m - 1 || a[mx][my] == 0) continue;//是mx不是x!!!!!!!// if(x < 0 || x > n - 1 || y < 0 || y > m - 1 || a[x][y] == 0) continue;if(vis[mx][my]){if(mx == px && my == py) continue;else{hascycle = 1;return;}}vis[mx][my] = 1;dfs(mx, my, x, y);}
}// bool hascycle(){//拓扑排序找环:入度小于等于1的结点入队,遍历相邻结点,使其入度减1,若减完入度小于等于1,则入队。//得用vis判断结点是否已经入过队,不然会死循环!!!!!!!!!!!!!!
// 	queue<pair<int, int>> q;
// 	int cnt = 0;
// 	bool vis[30][30] = {0};
// 	for(int i = 0; i < n; i++){
// 		for(int j = 0; j < m; j++){
// 			if(a[i][j] == 1 && ind[i][j] <= 1){
// 				q.push({i, j});
// 				cnt++;
// 				vis[i][j] = 1;
// 			}
// 		}
// 	}
// 	while(!q.empty()){
// 		auto u = q.front();
// 		q.pop();
// 		int x = u.first, y = u.second;
// 		for(int i = 0; i < 4; i++){
// 			int mx = x + dx[i], my = y + dy[i];
// 			if(mx < 0 || mx > n - 1 || my < 0 || my > m - 1 || a[mx][my] == 0) continue;
// 			ind[mx][my]--;
// 			if(ind[mx][my] <= 1 && !vis[mx][my]){
// 				q.push({mx, my});
// 				vis[mx][my] = 1;
// 				cnt++;
// 			}
// 		}
// 	}
// 	int tot = 0;
// 	for(int i = 0; i < n; i++){
// 		for(int j = 0; j < m; j++){
// 			if(a[i][j]) tot++;
// 		}
// 	}
// 	return cnt != tot;//是不等于!!!!!
// }int calc(){hascycle = 0;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){vis[i][j] = 0;ind[i][j] = 0;}}bool flag = 0;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(a[i][j] == 1 && !flag){vis[i][j] = 1;dfs(i, j, -1, -1);flag = 1;}}}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(a[i][j] == 1 && !vis[i][j]) return 0;}}
// 	for(int i = 0; i < n; i++){
// 		for(int j = 0; j < m; j++){
// 			if(a[i][j] == 0) continue;
// 			for(int k = 0; k < 4; k++){
// 				int mx = i + dx[k];
// 				int my = j + dy[k];
// 				if(mx < 0 || mx > n - 1 || my < 0 || my > m - 1 || a[mx][my] == 0) continue;
// 				ind[mx][my]++;
// 			}
// 		}
// 	}if(hascycle) return 0;	int res = 0;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(a[i][j] == 1){res++;}}}return res;
}void solve(){int q;cin >> n >> m;vector<int> vec(n);int res = 0;bool flag = 0;if(n > m){swap(n, m);flag = 1;}if(n == 1){if(!flag) cout << string(m, '.') << '\n';else{for(int i = 1; i <= m; i++){cout << ".\n";}}return;}string ans[30];if(n * m <= 20){for(int x = 0; x < (1LL << (n * m)); x++){// for(int x = 0; x <= 3; x++){// int x = 3;// xx = x;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){a[i][j] = x >> (i * m + j) & 1;}}hascycle = 0;int t = calc();// cout << x << ' ' << t << ' ' << hascycle << '\n';if(t > res){for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){b[i][j] = a[i][j];}}res = t;}}cout << res << '\n';for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){ans[i][j] = b[i][j] == 1 ? '.' : 'W';}
//             cout << '\n';}}else if(n == 2 && m == 11){ans[0] = "...........";ans[1] = ".W.W.W.W.W.";}else if(n == 2 && m == 12){ans[0] = "............";ans[1] = ".W.W.W.W.W.W";}else if(n == 3 && m == 7){ans[0] = ".......";ans[1] = ".W.W.W.";ans[2] = "..W...W";}else if(n == 3 && m == 8){ans[0] = "........";ans[1] = ".WW.W.W.";ans[2] = "...W...W";}else if(n == 4 && m == 6){ans[0] = ".......";ans[1] = "W.W.W.";ans[2] = ".W.W..";ans[3] = ".....W";}else{ans[0] = ".....";ans[1] = ".W.W.";ans[2] = "..W..";ans[3] = ".W.W.";ans[4] = "....W";}char ans2[30][30];if(!flag){for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){cout << ans[i][j];}cout << '\n';}}else{for(int j = 0; j < m; j++){for(int i = 0; i < n; i++){cout << ans[i][j];}cout << '\n';}}
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);int T = 1;// cin >> T;while(T--){solve();}return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309362.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

llamafactory:unified efficient fine-tuning of 100+ lanuage models

1.introduction llamafactory由三个主要模块组成&#xff0c;Model Loader&#xff0c;Data Worker&#xff0c;Trainer。 2.Efficient fine-tuning techniques 2.1 Efficient Optimization 冻结微调&#xff1a;冻结大部分参数&#xff0c;同时只在一小部分解码器层中微调剩…

Echarts简单的多表联动效果和添加水印和按钮切换数据效果

多表联动 多表联动效果指的是在多个表格之间建立一种交互关系&#xff0c;以便它们之间的操作或选择能够相互影响。通常情况下&#xff0c;多表联动效果可以通过以下方式之一实现&#xff1a; 数据关联&#xff1a; 当在一个表格中选择或操作某些数据时&#xff0c;另一个表格…

一.NODE MCU(ESP8285,ESP8286)开发环境搭建

一.序言: 1.esp8285长什么样? 2.esp8285是什么,能做什么? 通过上面图片,看到上面的芯片,是带有多个阵脚的单片机。实际上,看着该芯片很小,但是却具有完整的wifi无线蓝牙功能,它本身可以运行一个极简的linux小系统,并且该极简的小linux系统具备无线蓝牙功能。。它同…

网络编程【InetAddress , TCP 、UDP 、HTTP 案例】

day38上 网络编程 InetAddress 理解&#xff1a;表示主机类 一个域名 对应 多个IP地址 public static void main(String[] args) throws UnknownHostException {//获取本机的IP地址 // InetAddress localHost InetAddress.getLocalHost(); // System.out.println(localHos…

Mac 软件清单

~自留备用~ Macbook用了几年之后, 512G的内置硬盘有些紧张了, 这几天总是提示空间不足, 就重装了下系统, 重装之后竟然不记得有些软件的名字和下载链接, 特此记录 Office 办公套件 直接从微软官网下载Office 安装包https://officecdnmac.microsoft.com/pr/C1297A47-86C4-4C1F…

python botos s3 aws

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html AWS是亚马逊的云服务&#xff0c;其提供了非常丰富的套件&#xff0c;以及支持多种语言的SDK/API。本文针对其S3云储存服务的Python SDK&#xff08;boto3&#xff09;的使用进行介绍。 …

golang 使用栈模拟计算器

思路&#xff1a; // Author sunwenbo // 2024/4/12 16:51 package mainimport ("errors""fmt""strconv" )// 使用数组来模拟一个栈的应用 type Stack struct {MaxTop int //表示栈最大可以存放数的个数Top int //表示栈底&#xff…

了解 Vue 工程化开发中的组件通信

目录 1. 组件通信语法 1.1. 什么是组件通信&#xff1f; 1.2. 为什么要使用组件通信&#xff1f; 1.3. 组件之间有哪些关系&#xff08;组件关系分类&#xff09;&#xff1f; 1.4. 组件通信方案有哪几类 &#xff1f; 2. 父子通信流程图 3. 父传子 3.1. 父传子核心流程…

Tool:VRAM的简介、查询电脑VRAM的常用方法

Tool&#xff1a;VRAM的简介、查询电脑VRAM的常用方法 目录 VRAM的简介 查询电脑VRAM的常用方法 1、对于Windows系统 T1、设置-系统-显示查询法 T2、使用 DirectX 诊断工具&#xff1a; T3、使用系统信息工具&#xff1a; 2、对于Linux系统 T1、使用nvidia-smi命令&…

网络网络层之(2)ARP协议

网络网络层之(2)ARP协议 Author&#xff1a;Once Day Date: 2024年4月1日 漫漫长路&#xff0c;有人对你笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的博客-CSDN博客。 参考文档: 《TCP/IP详解卷一》arp(8) - Linux manual page (man7.org)彻底搞懂系…

Android MTK 屏下指纹的调试过程记录

Demo链接 -----> https://download.csdn.net/download/u011694328/89118346 一些品牌手机都有了屏下指纹的功能&#xff0c;还算是个比较新颖的功能&#xff0c;最近有项目需要使用屏下指纹&#xff0c; 使用的是汇顶&#xff08;Goodix&#xff09;的指纹方案&#xff0c…

<计算机网络自顶向下> TCPUDP套接字编程

应用实现&#xff1a;源端的应用进程交换报文实现应用协议&#xff0c;来实现各种各样的网络应用&#xff08;dash&#xff0c;email, etc&#xff09; 而应用层通信不可以直接通信&#xff0c;需要借助下层的服务才可以进行&#xff0c;通过层间接口交给下层&#xff0c;通过…

系统架构最佳实践 -- 金融企业的资损防控

一、资损产生的原因 由于支付行业的特殊性与复杂性&#xff08;主要处理资金相关业务&#xff09;&#xff0c;支付公司处于资损的风口浪尖&#xff0c;最容易发生资损&#xff0c;可以说资损风险无处不在。 常规来说&#xff0c;资损原因主要可以分为以下三类&#xff1a; 1…

【MATLAB源码-第49期】基于蚁群算法(ACO)算法的栅格路径规划,输出最佳路径图和算法收敛曲线图。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚁群算法是一种模拟自然界蚂蚁觅食行为的启发式优化算法。在蚁群系统中&#xff0c;通过模拟蚂蚁之间通过信息素沟通的方式来寻找最短路径。 在栅格路径规划中&#xff0c;蚁群算法的基本步骤如下&#xff1a; 1. 初始化: …

Notepad++软件安装及配置说明

Notepad是 Windows操作系统下的一套文本编辑器&#xff0c;有完整的中文化接口及支持多国语言编写的功能。 Notepad功能比 Windows自带记事本强大&#xff0c;除了可以用来制作一般的纯文字说明文件&#xff0c;也十分适合编写计算机程序代码。Notepad不但可以显示行号&#xf…

鸿蒙开发快速入门

基本概念 ArkTS 因为ArkTS是基于Type Script扩展而来&#xff0c;是Type Script的超集&#xff0c;所以也可以关注一下Type Script的语法来理解ArkTS的语法 ArkUI HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架…

对常见FTP客户端/服务器的调查与分析

前言 主要是想看看常见的服务器和客户端是如何实现协议中要求的功能的&#xff0c;。 比如RF959要求的记录结构&#xff08;Record Structure&#xff09;、页结构&#xff08;Page Structure&#xff09;、Block Mode、Compress Mode&#xff0c;看起来就很抽象。 实测发现…

给自己的机器人部件安装单目摄像头并实现gazebo仿真功能

手术执行器添加摄像头 手术执行器文件夹surgical_new内容展示如何添加单目摄像头下载现成的机器人环境文件启动仿真环境 手术执行器文件夹surgical_new内容展示 进入src文件夹下选择进入vision_obliquity文件夹 选择launch 有两个可用gazebo中rviz展示的launch文件&#xff0…

Unity 2D让相机跟随角色移动

相机跟随移动 最简单的方式通过插件Cinemachine 在窗口/包管理器选择全部找到Cinemachine&#xff0c;导入。然后在游戏对象/Cinemachine创建2D Camera。此时层级中创建一个2D相机。选中人物拖入检查器Follow。此时相机跟随人物移动。 修改相机视口距离 在检查器中Lens下调正…