度度熊的01世界

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 874    Accepted Submission(s): 299

Problem Description

度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由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

 

Output

如果这个图是1的话,输出1;如果是0的话,输出0,都不是输出-1。
 

Sample Input

32 32
00000000000000000000000000000000
00000000000111111110000000000000
00000000001111111111100000000000
00000000001111111111110000000000
00000000011111111111111000000000
00000000011111100011111000000000
00000000111110000001111000000000
00000000111110000001111100000000
00000000111110000000111110000000
00000001111110000000111110000000
00000001111110000000011111000000
00000001111110000000001111000000
00000001111110000000001111100000
00000001111100000000001111000000
00000001111000000000001111000000
00000001111000000000001111000000
00000001111000000000000111000000
00000000111100000000000111000000
00000000111100000000000111000000
00000000111100000000000111000000
00000001111000000000011110000000
00000001111000000000011110000000
00000000111000000000011110000000
00000000111110000011111110000000
00000000111110001111111100000000
00000000111111111111111000000000
00000000011111111111111000000000
00000000111111111111100000000000
00000000011111111111000000000000
00000000001111111000000000000000
00000000001111100000000000000000
00000000000000000000000000000000
32 32
00000000000000000000000000000000
00000000000000001111110000000000
00000000000000001111111000000000
00000000000000011111111000000000
00000000000000111111111000000000
00000000000000011111111000000000
00000000000000011111111000000000
00000000000000111111110000000000
00000000000000111111100000000000
00000000000001111111100000000000
00000000000001111111110000000000
00000000000001111111110000000000
00000000000001111111100000000000
00000000000011111110000000000000
00000000011111111110000000000000
00000001111111111111000000000000
00000011111111111111000000000000
00000011111111111111000000000000
00000011111111111110000000000000
00000000001111111111000000000000
00000000000000111111000000000000
00000000000001111111000000000000
00000000000111111110000000000000
00000000000011111111000000000000
00000000000011111111000000000000
00000000000011111111100000000000
00000000000011111111100000000000
00000000000000111111110000000000
00000000000000001111111111000000
00000000000000001111111111000000
00000000000000000111111111000000
00000000000000000000000000000000
3 3
101
101
011
 

Sample Output

0
1
-1
 

Source

 
 //2017-08-12
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue> using namespace std; const int N = ;
char G[N][N];
int n, m;
int dx[] = {, , , -};
int dy[] = {, , -, };
bool vis[N][N];
struct Node{
int x, y;
Node(int _x, int _y):x(_x), y(_y){}
}; void bfs(int x, int y, int op){
Node node(x, y);
memset(vis, , sizeof(vis));
vis[x][y] = op+;
G[x][y] = '#';
queue<Node> q;
q.push(node);
while(!q.empty()){
Node a = q.front();
q.pop();
for(int i = ; i < ; i++){
int nx = a.x + dx[i];
int ny = a.y + dy[i];
if(nx>= && nx < n && ny>= && ny < m && !vis[nx][ny] && G[nx][ny] == ''+op){
Node tmp(nx, ny);
q.push(tmp);
vis[nx][ny] = op+;
G[nx][ny] = '#';
}
}
}
} int main()
{
//freopen("data1006.txt", "r", stdin);
while(scanf("%d%d", &n, &m)!=EOF){
for(int i = ; i < n; i++){
scanf("%s", G[i]);
}
for(int i = ; i < m; i++){
if(G[][i] == '')bfs(, i, );
if(G[n-][i] == '')bfs(n-, i, );
}
for(int i = ; i < n; i++){
if(G[i][] == '')bfs(i, , );
if(G[i][m-] == '')bfs(i, m-, );
}
int cnt1 = ;
for(int i = ; i < n; i++){
for(int j = ; j < m; j++){
if(G[i][j] == ''){
bfs(i, j, );
cnt1++;
}
}
}
int cnt2 = ;
for(int i = ; i < n; i++){
for(int j = ; j < m; j++){
if(G[i][j] == ''){
bfs(i, j, );
cnt2++;
}
}
}
if(cnt1== && cnt2 == )printf("1\n");
else if(cnt1 == && cnt2 == )printf("0\n");
else printf("-1\n");
} return ;
}

HDU6113的更多相关文章

  1. 2017百度之星初赛A-1006(HDU-6113)

    思路:在图的外面包一圈'0'字符,然后dfs统计'0'字符的个数和'1'字符的个数.结果如下(num0表示0字符的个数,num1表示1字符的个数): num0 == 1 && num1 ...

  2. HDU-6113

    度度熊是一个喜欢计算机的孩子,在计算机的世界中,所有事物实际上都只由0和1组成. 现在给你一个n*m的图像,你需要分辨他究竟是0,还是1,或者两者均不是. 图像0的定义:存在1字符且1字符只能是由一个 ...

随机推荐

  1. 使用Squid部署代理服务

    Squid是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存.简单来说,Squid服务程序会按照收到的用户请求向网站源 ...

  2. redis windows版本下载地址(不用hm提供的)

    https://github.com/MicrosoftArchive/redis/releases

  3. 分布式锁实现思路及开源项目集成到springmvc并使用

    分布式锁顾名思义就是在分布式系统下的锁,而使用锁的唯一目的就是为了防止多个请求同时对某一个资源进行竞争性读写 在使用多线程时,为了让某一资源某一时刻只能有一个操作者,经常使用synchronized, ...

  4. flask——包含,继承,宏

     包含,继承,宏  都是为了提高代码的效率,都是为了防止代码的沉余,浪费资源 宏(macro) 可以把它看做Jinja2中的一个函数,他会返回一个模板或者HTML字符串,为了避免反复的编写同样的模板代 ...

  5. Git使用、Git配置、Git提交代码、Git上传

    非教程,只是自己的一个简单笔记.建议没有入门的朋友,直接看git的官方help文档: https://help.github.com/articles/set-up-git 1.注册一个git账号,超 ...

  6. (转)AIX7.1安装Nginx 1.13的方法

    原文:https://blog.csdn.net/lvshaorong/article/details/79401860 https://blog.csdn.net/lvshaorong/articl ...

  7. springboot + mybatis +druid

    Druid Spring Boot Starter mybatis-spring-boot-autoconfigure mybatis-spring-boot-samples 新建spring boo ...

  8. [原] ubuntu安装Fcitx输入法

    1.终端输入: sudo add-apt-repository ppa:wengxt/fcitx-nightly 按回车确认添加 2.sudo apt-get update 更新软件源 3.sudo ...

  9. [Python]可变类型,默认参数与学弟的困惑

    一.学弟的困惑 十天前一个夜阑人静.月明星稀的夜晚,我和我的朋友们正在学校东门的小餐馆里吃着方圆3里内最美味的牛蛙,唱着最好听的歌儿,畅聊人生的意义.突然,我的手机一震,气氛瞬间就安静下来,看着牛蛙碗 ...

  10. wget命令【转】

    http://man.linuxde.net/wget 语法: wget (选项)(参数) 选线 -a<日志文件>:在指定的日志文件中记录资料的执行过程: -A<后缀名>:指定 ...