[CodeForces445A]DZY Loves Chessboard[bfs]
2015-06-09 21:53
381 查看
题目链接:[CodeForces445A]DZY Loves Chessboard[BFS]
题意分析:棋盘上有好的点和坏的点,DZY只能在好的点放置棋子,棋子总共就两种颜色:黑和白。问:给出一个棋盘,放满整个棋盘上好的点,使得同种颜色的棋子没有公共边(保证至少有一个解)
解题思路:默认初始点放置黑棋,然后把该点加入队列,更新四周的点为白旗,接着把四周的点加入队列,接着更新四周为不同颜色的点。
个人感受:一开始直接和以前做搜索一样,添加点,然后判断周围的点的颜色再确定当前点的颜色。各种WA。思维太固定了!
具体代码如下:
题意分析:棋盘上有好的点和坏的点,DZY只能在好的点放置棋子,棋子总共就两种颜色:黑和白。问:给出一个棋盘,放满整个棋盘上好的点,使得同种颜色的棋子没有公共边(保证至少有一个解)
解题思路:默认初始点放置黑棋,然后把该点加入队列,更新四周的点为白旗,接着把四周的点加入队列,接着更新四周为不同颜色的点。
个人感受:一开始直接和以前做搜索一样,添加点,然后判断周围的点的颜色再确定当前点的颜色。各种WA。思维太固定了!
具体代码如下:
#include <iostream> #include <queue> using namespace std; struct Node{ int x, y; }; char a[111][111]; int dir[2][4] = {0, 1, 0, -1, 1, 0, -1, 0}; int n, m; queue<Node> q; void bfs(int x, int y) { q.push(Node{x, y}); while (!q.empty()) { Node e = q.front(); q.pop(); char judge = a[e.x][e.y] == 'B' ? 'W' : 'B'; //确定周围点颜色 for (int i = 0; i < 4; ++i) { int nx = e.x + dir[0][i], ny = e.y + dir[1][i]; if (0 <= nx && nx < n && 0 <= ny && ny < m && a[nx][ny] == '.') { a[nx][ny] = judge; q.push(Node{nx, ny}); } } } } int main() { cin >> n >> m; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) cin >> a[i][j]; for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) if (a[i][j] == '.') { a[i][j] = 'B'; //默认黑先(纯粹个人喜好) bfs(i, j); } for (int i = 0; i < n; ++i) cout << a[i] << '\n'; return 0; }
相关文章推荐
- Add Binary
- Spring中引入properties文件
- hibernate关联映射
- LeetCode 13:"Roman to Integer"
- Java虚拟机ClassLoader知识详解(2)
- hihoCode 第49周 欧拉路 的C实现方法
- [Swust OJ 585]--倒金字塔(LIS最长不下降子序列)
- Java基础 Java与C++的几点细节不同
- LeetCode 12:"Integer to Roman"
- C#排序算法小结
- Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file
- 6.2.2 构造函数模式
- 作用域和控制器
- Linux GCC常用命令 与 gcc 编译器常用的命令行参数一览
- LVS-nat架构原理与实现方案
- Struts2学习笔记(1)——Struts2的基本介绍
- Android Fragment完全解析
- vnc-4.0-winsrc版本之winvnc工程分析_源码研究
- Python基础:21包装
- Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享