问题 B: 沈老师的岛

题目描述

沈老师天天说象山是个好地方,鹤浦更是个好地方。由于鹤浦是一个岛屿,沈老师更是有一个外号叫做“岛主”。现在“岛主”来请你帮帮忙,他想知道,他的家乡附近有多少个独立的岛屿?
给定一个由 ‘@’(陆地)和 '’(水)组成的的二维网格,计算独立的岛屿的数量。一个岛被水包围,并且它是通过水平或垂直8个方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
输入
样例输入由多组测试数据组成。第一行输入两个正整数n和m分别代表网格的高和宽 ( 0 < n,m <= 100 )
接下来输入一个n
m的网格,网格内只由字符 ‘@’ 和 ‘*’ 组成,@代表陆地,*代表海洋。

输出

输出独立的岛屿的数量

样例输入 Copy

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*

样例输出 Copy

0
1
2

思路
这题可以使用并查集和dfs,下面是我用并查集去完成的。

AC代码

#include<bits/stdc++.h>
using namespace std;
int s[10005];
//int dir[8][2] = { {0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{1,-1} };
char mp[105][105];
int ans = 0;
void init(int n){for(int i = 0 ; i < n ; i ++){s[i] = i;}
}
/*void inits(int n){for(int i = 0 ; i < n ; i ++){cout << s[i] << " ";}
}*/
int find(int x){if(s[x] == x){return x;}s[x] = find(s[x]);return s[x];
}
int marge(int x,int y){int tx = find(x);int ty = find(y);if(tx != ty){s[tx] = ty;ans --;}
}
int main(){int n,m;while(cin >> n >> m){ans = 0;memset(mp,'\0',sizeof(mp));for(int i = 0 ; i < n ; i ++){scanf("%s",&mp[i]);}for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j < m ; j ++){if(mp[i][j] == '@') ans ++; }}/*for(int i = 1 ; i <= n ; i ++){for(int j = 0 ; j <= m ; j ++){cout << mp[i][j] << " ";           //输入判断是否正确 }cout << endl;}*/init(n * m);for(int i = 0 ; i < n ; i ++){for(int j = 0 ; j < m ; j ++){if(mp[i][j] == '@' && mp[i - 1][j] == '@' && i - 1 >= 0){marge(m * i + j,(i - 1) * m + j);    }if(mp[i][j] == '@' && mp[i + 1][j] == '@' && i + 1 < n ){marge(m * i + j,(i + 1) * m + j);   }if(mp[i][j] == '@' && mp[i][j - 1] == '@' && j - 1 >= 0){marge(m * i + j,i * m + j - 1);   }if(mp[i][j] == '@' && mp[i][j + 1] == '@' && j + 1 < m){marge(m * i + j,i * m + j + 1);  }if(mp[i][j] == '@' && mp[i + 1][j + 1] == '@' && i + 1 < n && j + 1 < m){marge(m * i + j,(i + 1) * m + j + 1);}if(mp[i][j] == '@' && mp[i + 1][j - 1] == '@' && i + 1 < n && j - 1 >= 0){marge(m * i + j,(i + 1) * m + j - 1);}if(mp[i][j] == '@' && mp[i - 1][j + 1] == '@' && i - 1 >= 0 && j + 1 < m){marge(m * i + j,(i - 1) * m + j + 1);}if(mp[i][j] == '@' && mp[i - 1][j - 1] == '@' && i - 1 >= 0 && j - 1 >= 0){marge(m * i + j,(i - 1) * m + j - 1);}}}//   inits(n * m);cout << ans << endl;}
}

问题 B: 沈老师的岛相关推荐

  1. 「津津乐道播客」#231. 串台:跟『新世相』聊聊被刷屏的『沈老师』

    这个月,恐怕每位播客的重度听众都不可避免的听到了来自复旦大学的沈老师的情感家庭话题分享,而这背后是"新世相"在播客推广领域的探索和尝试. 这次推广活动的初衷是什么?为何选择播客这个 ...

  2. 沈老师,你是如何进入代码世界的?

    上个月直播,主持人以及听众提问的实录,摘取了和自己职业发展相关的部分,分享给大家. 沈老师,和大家做一个简单的自我介绍? 大家好,我是快狗打车的CTO沈剑,架构师之路作者,技术人一枚.毕业之后进入百度 ...

  3. 国科大《高级人工智能》沈老师部分——行为主义笔记

    国科大<高级人工智能>沈老师部分--行为主义笔记 沈华伟老师yyds,每次上他的课都有一种深入浅出的感觉,他能够把很难的东西讲的很简单,听完就是醍醐灌顶,理解起来特别清晰 今年考试题目这部 ...

  4. 沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题

    来源:微软学术合作 本文约6000字,建议阅读8分钟. 阅读文章不仅是大家在科研道路上进步的必由之路,也能使我们的心智不断成长,认知模型和思维方式不断完善. 沈向洋博士:如何以正确方式打开一篇科研论文 ...

  5. 搞科研,从好好读论文开始:沈向洋带你读论文了

    「或许你永远不知道你以前读过的书能在什么时候派上用场,但请保持阅读,因为阅读的过程也是在你大脑中建立认知的过程.」 对于科研人员来说,读论文是一种必修技能.去年,沈向洋博士曾在线上公开课<You ...

  6. Twitch 沈悦时:国内外互联网直播生态差异

    本文来自Twitch Principal Research Engineer 沈悦时在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成.在分享中,沈悦时介 ...

  7. 沈寅鑫银行内训实战专家

    金融学双硕士 上海财经大学客座教授 浙江大学长期聘用讲师 17家企业<银行大学>培训中心合作讲师 多家农商行股东 上海科技金融银行事业部总监 沈老师身兼银行股东,咨询顾问于一体.上海科技金 ...

  8. 沈剑架构师之路的分享-总结

    今天是正好听了沈剑,沈老师的架构师之路分享,然后简单的加了点自己的理解. 虽说有些部分稍有鸡汤嫌疑,但是这个鸡汤我确实喝了 沈老师的这次分享不得不说是干货满满 技术原理随处搜索可见,思想干货可不多,这 ...

  9. 如果你学不好架构设计,那你一定没遇到沈剑!

    熟悉小灰的小伙伴都知道,小灰写公众号已经三年多了.三年前,小灰的公众号刚刚起步的时候,就在关注着一个IT领域的头部大号:架构师之路. 架构师之路-分享技术思路 架构师之路的作者是沈剑老师,这位大神不但 ...

最新文章

  1. Virtools学习(七)—2D Picking
  2. Range在各浏览器下的问题和常见处理办法
  3. 元素对应到html源代码,【整理】用Chrome或Chromium查看百度首页中各元素的html源码...
  4. Keil uvision 4 MDK 安装教程附免费安装包资源
  5. 微信公众平台开发—利用OAuth2.0获取微信用户基本信息
  6. 【Java基础】 JQuery的常用操作
  7. Android Studio + TensorFlow lite 0.1.7
  8. android死锁解决方案,【线程死锁】Android多线程死锁产生的原因以及如何避免
  9. 编辑修改PDF文件的简单方法
  10. (2)响应式流——响应式Spring的道法术器
  11. 头条白板面试_让我们谈谈白板面试和可能的替代方法
  12. 在一起计时器_没想到吧?快手竟然给厕所上安装了计时器,或许职场从此再无带薪拉屎...
  13. 性能测试从零开始(视频笔记 20210504)
  14. wxPython:python首选的GUI库
  15. 智能手表,不再只是手机品牌的“附属品”
  16. python编程怎么念_python怎么读 python的读法
  17. android服务下载apk下载地址,android 从服务器上获取APK并下载安装
  18. 2022.04精灵宝可梦国内在线观看渠道整理
  19. 【自学HTML笔记第5篇】HTML中的下拉菜单标签
  20. 书旗app字符串加密分析

热门文章

  1. tikz 折线 箭头_[LaTeX 绘图] tikz 绘制流程图,概述和两个示例
  2. 嵌入式linux学习路线,嵌入式开发视频教程
  3. 【财富空间】毛日昇:阿里“五新”战略有力助推供给侧结构性改革
  4. Linux 内核、进程调度、进程通信、多线程、协程
  5. 手机号注册过,被遗忘的网站有哪些?
  6. unity_NGUI动态字体制作与字体清晰的几点要素
  7. 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag识别
  8. 3dmaxobj导出选项_3dmax将模型导出成OBJ格式和贴图的一些注意点
  9. IC芯片制造过程简介
  10. “孙宇晨们”眼中的区块链,并非国家提倡的区块链