2017"百度之星"程序设计大赛
来源:互联网 发布:伊朗 朝鲜 知乎 编辑:程序博客网 时间:2024/06/04 19:39
按照题目要求判断联通块个数和被包围个数之间的关系来判断图形。用dfs来进行联通块染色判断。
#include<bits/stdc++.h>using namespace std;const int MAXN = 110;char img[MAXN][MAXN];int n,m;bool vis[MAXN][MAXN];int cx[]={0,0,1,-1};int cy[]={1,-1,0,0};bool bound;void init(){ memset(vis,0,sizeof vis); memset(img,0,sizeof img);}void dfs(int x,int y,int num){ vis[x][y]=true; for(int i=0;i<4;i++) { int nx=cx[i]+x; int ny=cy[i]+y; if(img[nx][ny]==0) { bound=true; continue; } if(vis[nx][ny]) continue; if(img[nx][ny]!='0'+num) continue; dfs(nx,ny,num); }}int main(){ if (fopen("in.txt", "r") != NULL) { freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); } while(cin>>n>>m) { init(); for(int i=1;i<=n;i++) scanf("%s",img[i]+1); int cnt1=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(!vis[i][j]&&img[i][j]=='1') { cnt1++; dfs(i,j,1); } } } if(cnt1!=1) { puts("-1"); continue; } int cnt0=0; int bound0=false; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(!vis[i][j]&&img[i][j]=='0') { cnt0++; bound=false; dfs(i,j,0); if(bound) bound0++; } } } if(cnt0-bound0==1) { puts("0"); continue; } if(bound0==cnt0) { puts("1"); continue; } puts("-1"); } return 0;}
阅读全文
0 0
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 【2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛
- 2017"百度之星"程序设计大赛-资格赛
- c语言经典题算法1--用辗转相除法求两个数的最大公约数
- xlistview_header的布局
- ubuntu下vue.js环境搭建初始化项目
- Eclipse中创建新的SpringBoot项目
- ImageLoader的简单使用
- 2017"百度之星"程序设计大赛
- 修改图片大小
- 关于Java中static
- Python基础语法之内置的数据类型list和tuple
- ListView加载条目
- 侧拉菜单显示
- angularjs中ng-options的用法
- 欢迎使用CSDN-markdown编辑器
- 【软工学习】第十三章——UML建模技术