百度之星初赛(A)Hdu-6113.度度熊的01世界
来源:互联网 发布:网络教育第二学位 编辑:程序博客网 时间:2024/05/21 03:47
Problem Description
度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成。
现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是。
图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且仅存在一个由0字符组成的连通块完全被1所包围。
图像1的定义:存在1字符且1字符只能是由一个连通块组成,不存在任何0字符组成的连通块被1所完全包围。
连通的含义是,只要连续两个方块有公共边,就看做是连通。
完全包围的意思是,该连通块不与边界相接触。
现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是。
图像0的定义:存在1字符且1字符只能是由一个连通块组成,存在且仅存在一个由0字符组成的连通块完全被1所包围。
图像1的定义:存在1字符且1字符只能是由一个连通块组成,不存在任何0字符组成的连通块被1所完全包围。
连通的含义是,只要连续两个方块有公共边,就看做是连通。
完全包围的意思是,该连通块不与边界相接触。
Input
本题包含若干组测试数据。
每组测试数据包含:
第一行两个整数n,m表示图像的长与宽。
接下来n行m列将会是只有01组成的字符画。
满足1<=n,m<=100
每组测试数据包含:
第一行两个整数n,m表示图像的长与宽。
接下来n行m列将会是只有01组成的字符画。
满足1<=n,m<=100
Output
如果这个图是1的话,输出1;如果是0的话,输出0,都不是输出-1。
Sample Input
32 32000000000000000000000000000000000000000000011111111000000000000000000000001111111111100000000000000000000011111111111100000000000000000001111111111111100000000000000000011111100011111000000000000000001111100000011110000000000000000011111000000111110000000000000000111110000000111110000000000000011111100000001111100000000000000111111000000001111100000000000001111110000000001111000000000000011111100000000011111000000000000111110000000000111100000000000001111000000000001111000000000000011110000000000011110000000000000111100000000000011100000000000000111100000000000111000000000000001111000000000001110000000000000011110000000000011100000000000001111000000000011110000000000000011110000000000111100000000000000011100000000001111000000000000000111110000011111110000000000000001111100011111111000000000000000011111111111111100000000000000000011111111111111000000000000000001111111111111000000000000000000001111111111100000000000000000000001111111000000000000000000000000011111000000000000000000000000000000000000000000000000032 3200000000000000000000000000000000000000000000000011111100000000000000000000000000111111100000000000000000000000011111111000000000000000000000001111111110000000000000000000000001111111100000000000000000000000011111111000000000000000000000001111111100000000000000000000000011111110000000000000000000000001111111100000000000000000000000011111111100000000000000000000000111111111000000000000000000000001111111100000000000000000000000111111100000000000000000000001111111111000000000000000000001111111111111000000000000000000111111111111110000000000000000001111111111111100000000000000000011111111111110000000000000000000000011111111110000000000000000000000000011111100000000000000000000000001111111000000000000000000000001111111100000000000000000000000001111111100000000000000000000000011111111000000000000000000000000111111111000000000000000000000001111111110000000000000000000000000111111110000000000000000000000000011111111110000000000000000000000111111111100000000000000000000000111111111000000000000000000000000000000000000003 3101101011
Sample Output
01-1
否则,如果1的连通块个数为1,并且 没有被1包围的连通块,那么就是1,否则:输出-1.
#include <iostream>#include <stdio.h>#include <algorithm>#include <math.h>#include <queue>#include <vector>#include <string.h>#define LL long long#define siz 1005#define LL long long#define pd isusing namespace std;int n,m,k;int year,month,day;char ss[205][205];int flag1,flag0,flag;int ans1,ans0;struct node{ int gx,gy;};queue<node>que;bool is(int x,int y,char c){ if(x>=1&&x<=n&&y>=1&&y<=m&&c==ss[x][y]) return true; return false;}void bfs(int x,int y,char c){ while(!que.empty()) que.pop(); node u,v; u.gx = x; u.gy = y; que.push(u); while(!que.empty()){ u = que.front(); que.pop(); if(u.gx==1||u.gx==n||u.gy==1||u.gy==m) flag = 1; if(ss[u.gx][u.gy]=='-') continue; ss[u.gx][u.gy]='-'; v.gx = u.gx; v.gy = u.gy -1; if(pd(v.gx,v.gy,c)){ que.push(v); } v.gy = u.gy +1; if(pd(v.gx,v.gy,c)){ que.push(v); } v.gx = u.gx +1; v.gy = u.gy; if(pd(v.gx,v.gy,c)){ que.push(v); } v.gx = u.gx-1; if(pd(v.gx,v.gy,c)){ que.push(v); } }}void solve(){ LL ans = 0; while(!que.empty()) que.pop(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(ss[i][j]!='-'){ char cc=ss[i][j]; if(ss[i][j]=='1') ans1++; else if(ss[i][j] == '0') ans0++; flag = 0; bfs(i,j,ss[i][j]); if(flag==1){ if(cc=='1') flag1++; else if(cc == '0') flag0++; } } } } if(ans0>=2&&ans1==1&&ans0-flag0==1){ printf("0\n"); } else if(ans0==1&&ans1==1&&flag0==0){ printf("0\n"); } else if(ans1==1&&ans0==flag0){ printf("1\n"); } else{ printf("-1\n"); }}int main(){ while(~scanf("%d%d",&n,&m)){ for(int i=1;i<=n;i++){ scanf("%s",ss[i]+1); } flag1=0,flag0=0; ans1=0; ans0=0; solve(); } return 0;}
阅读全文
0 0
- 百度之星初赛(A)Hdu-6113.度度熊的01世界
- 2017百度之星初赛(A) 度度熊的01世界(BFS/DFS)
- 2017百度之星初赛:A-1006. 度度熊的01世界(DFS)
- 百度之星初赛(A)--度度熊的01世界----bfs搜索
- 【原创】【百度之星2017初赛A】1006 度度熊的01世界
- hdu6113 2017"百度之星"初赛(A)1006度度熊的01世界(搜索)
- 2017百度之星初赛(A) 1006 度度熊的01世界(搜索连通块)
- 2017百度之星初赛(A) 1006 度度熊的01世界(bfs找连通块)
- 2017 百度之星A轮初赛(小C的倍数问题, 今夕何夕, 度度熊的01世界)
- 2017百度之星初赛A-1006(HDU-6113)
- hdu 6113 度度熊的01世界/2017 百度之星
- HDU 6108 2017 百度之星 初赛A 1001 小C的倍数问题
- 关于百度之星初赛B的A题Chess
- 百度之星初赛-(A) A小C的倍数问题
- 2017百度之星资初赛(A)--E:今夕何夕
- 百度之星2017初赛题解(A)
- 百度之星初赛(A)--今夕何夕----大模拟
- 百度之星初赛(A)--数据分割----启发式合并
- C++编写红警3 1.12版本修改器
- 慕课网《linux网络管理》笔记
- 【线段树】基础
- Android基础_需要使用adapter的控件,以及对BaseAdapter及其中的ViewHolder进行重构(三)
- 算法笔记(5)图的广度优先遍历和深度优先遍历
- 百度之星初赛(A)Hdu-6113.度度熊的01世界
- [leetcode]488. Zuma Game
- android文本编辑工具类之SpannableStringUtils
- Java中的String类型
- Struts2常量介绍
- heapster资源API
- HDU6108 小C的倍数问题(规律,2017"百度之星"程序设计大赛
- mysql触发器用法
- 异步消息队列