博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用DFS求联通块个数
阅读量:4485 次
发布时间:2019-06-08

本文共 994 字,大约阅读时间需要 3 分钟。

/*572 - Oil Deposits---DFS求联通块个数:从每个@出发遍历它周围的@。每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否---已有编号,从而避免了一个格子重复访问多次--*/#define _CRT_SECURE_NO_DEPRECATE#include
#include
#include
using namespace std;const int maxn = 100 + 5;char M[maxn][maxn];int idx[maxn][maxn];int m, n;void dfs(int r, int c, int id){ if (r < 0 || c < 0 || r >= n || c >= m)return; //出界 if (idx[r][c]>0||M[r][c]!='@')return; //已经访问过,或者不是@ idx[r][c] = id; //该联通分量编号 for (int dr = -1; dr <= 1; dr++){ //扫描它周围的8个方向 for (int dc = -1; dc <= 1; dc++)if (dr || dc) dfs(dr + r, dc + c, id); }}int main(){ while (scanf("%d%d", &n, &m) && m&&n){ for (int i = 0; i < n; i++) scanf("%s", M[i]); int cnt = 0; memset(idx, 0, sizeof(idx)); //没有访问 for (int i = 0; i < n;i++) for (int j = 0; j < m; j++){ //如果当前没有被访问过,并且当前位置字符是@ if (idx[i][j] == 0 && M[i][j] == '@') dfs(i, j, ++cnt); } printf("%d\n", cnt); } return 0;}

  

转载于:https://www.cnblogs.com/td15980891505/p/5829478.html

你可能感兴趣的文章
常用正则表达式
查看>>
C++学习笔记(IV) 之 表达式
查看>>
Houdini 节点参数读取输入节点的数据列表
查看>>
初识Linq to Entity
查看>>
Linux vmstat命令实战详解
查看>>
FastDFS在centos上的安装配置与使用
查看>>
HDU 1709 The Balance
查看>>
2016/7/7 设置wamp2.5 mysql密码 重点是mysql版本
查看>>
简介几种负载均衡原理
查看>>
micropython logging文档
查看>>
Web站点风格切换的实现
查看>>
Python 文件操作
查看>>
免费后台管理UI界面、html源码推荐
查看>>
Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
查看>>
python学习-- Django根据现有数据库,自动生成models模型文件
查看>>
github第一步之初始化操作
查看>>
《CoderXiaoban团队》第一次作业:团队亮相
查看>>
使用vue脚手架vue-cli搭建项目
查看>>
四轴飞行器Bootloader和固件的更新
查看>>
NLP之电影评分数据的情感分析
查看>>