博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1241_广度优先搜索
阅读量:4922 次
发布时间:2019-06-11

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

题目大意: 给你一个地图,有两种元素分别为‘.’与 ,然后要求你找出不相连的@的个数,@的邻接与@的对角都算是相连的。 解题思路: 广搜的入门题嘛,一开始想的时候,就感觉广搜很靠谱,因为搜相连的,用按层来历遍是比较好的,直接从地图上的每个点开始枚举,如果有一个点为@,那么就以这个点为起始点去开始广搜,然后广搜到它相连的点都标志掉,接着再重复一开始的操作。 吐吐槽: 做完这道题目后才发现,自己没有用到题目上那个一个连通块的@数目不能超过100,没加这个条件也ac了,是不是测试数据有点水…… 代码:
#include#includeconst int MAX=105;using namespace std;int m,n;char map[MAX][MAX];bool visited[MAX][MAX];typedef struct n{	int x,y;}N;int dir[8][2]={
{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};void BFS(int x,int y){ queueQ; N pre,cur; pre.x=x; pre.y=y; Q.push(pre); visited[pre.x][pre.y]=true; while(!Q.empty()) { pre=Q.front(); Q.pop(); for(int i=0;i<8;i++) { cur=pre; cur.x+=dir[i][0]; cur.y+=dir[i][1]; if(visited[cur.x][cur.y]==false && map[cur.x][cur.y]=='@' && cur.x>=1 && cur.x<=m && cur.y>=1 && cur.y<=n) { visited[cur.x][cur.y]=true; Q.push(cur); } } }}void init(){ memset(visited,false,sizeof(visited));}int main(void){ while(cin>>m>>n,m)//m为行 { init(); int i,j; for(i=1;i<=m;i++) { scanf("%s",map[i]+1); } int count=0; for(i=1;i<=m;i++) for(j=1;j<=n;j++) { if(visited[i][j]==false && map[i][j]=='@') { BFS(i,j); count++; } } cout<

转载于:https://www.cnblogs.com/cchun/archive/2011/12/03/2520199.html

你可能感兴趣的文章
SMO算法精解
查看>>
第k小元素学习记录
查看>>
avi文件格式详解【转】
查看>>
django
查看>>
Java学习从入门到精通
查看>>
查找目录下的所有文件中是否含有某个字符串 linux
查看>>
2018年各大互联网前端面试题四(美团)
查看>>
一起学Python:字符串介绍
查看>>
学习笔记:树状数组
查看>>
洛谷P1772 [ZJOI2006]物流运输 题解
查看>>
CF519E A and B and Lecture Rooms
查看>>
python-redis之数据类型二
查看>>
Java类加载机制
查看>>
循环单链表实现
查看>>
Android设计模式实战---责任链模式
查看>>
剑指Offer_31_整数中1出现的次数(从1到n整数中1出现的次数)
查看>>
10月29日 迅雷会员vip账号分享 91freevip 晚间21:00更新
查看>>
【一题多解】Python 字符串逆序
查看>>
open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
查看>>
字典(dictionary)与映射(map)
查看>>