蓝桥杯 剪邮票
2016-03-20 20:58
232 查看
思路:dfs每个格子选或不选,选定5个格子后判连通。这样写好像不会漏情况。结果是116
#include <iostream> #include <cstdio> using namespace std; int map[3][4]; int temp_map[3][4]; bool in[3][4]; int dx[4] = {0,1,0,-1}; int dy[4] = {1,0,-1,0}; void dfs_connected(int x,int y) { temp_map[x][y] = false; for(int k = 0;k < 4;k ++) { int nx = x + dx[k]; int ny = y + dy[k]; if(nx >= 0 && nx < 3 && ny >= 0 && ny < 4 && temp_map[nx][ny]) { dfs_connected(nx,ny); } } } int dfs(int x,int y,int cur) { if(x == 3) return 0; if(cur == 5) { for(int i = 0;i < 3;i ++) { for(int j = 0;j < 4;j ++) { temp_map[i][j] = in[i][j]; } } int cnt = 0; for(int i = 0;i < 3;i ++) { for(int j = 0;j < 4;j ++) { if(temp_map[i][j]) { dfs_connected(i,j); cnt ++; } } } if(cnt > 1) return 0; return 1; } int nx; int ny; int cnt = 0; if(y < 3) { ny = y + 1; nx = x; } else { ny = 0; nx = x + 1; } if(x == -1 && y == 0) { nx = ny = 0; } in[nx][ny] = true; cnt += dfs(nx,ny,cur + 1); in[nx][ny] = false; cnt += dfs(nx,ny,cur); return cnt; } int main() { cout << dfs(-1,0,0) << endl; return 0; }
相关文章推荐
- js设计模式-工厂模式(抽象工厂)
- 猎豹MFC--使用GDI+打开保存图片--把bmp格式图像 保存为了 jpeg格式
- 出差(二十六)
- cocoapods
- 【转】关于irqbalance的问题
- 我在这里安家了,准备第一天零基础学习python
- hdu 1425 Sort
- C++ 重载和const形参
- Hough提取边缘直线
- 猎豹MFC--GDI+
- Class类的使用
- Linux内核创建socket的过程
- 第七届蓝桥杯Java语言B组真题(省赛)
- 欢迎使用CSDN-markdown编辑器
- 递归方法解决最大连续子数列问题
- 如何使CSDN博客写得更加流畅漂亮?
- USB接口定义
- linux shell 解读 “永久环境变量” “临时环境变量”和"普通变量"
- 《Java程序设计》第三周学习总结
- Hibernate逍遥游记-第12章 映射值类型集合-005对集合排序Map(<order-by>\<sort>)