搜索专题 M
2017-05-12 23:00
225 查看
1、简单描述
一个m*n的方阵,由*和@组成,计算共有多少个@块。
2、思路
一个m*n的方阵,由*和@组成,计算共有多少个@块。
2、思路
#include<iostream> #include<string.h> #include<algorithm> #include<queue> using namespace std; int m,n; char mp[101][101]; int dir[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}}; struct node { int x,y; node(){}; node(int a,int b){x=a;y=b;} }; bool vis[101][101]; bool check(int i,int j) { if(i<1||i>m||j<1||j>n) return false; if(mp[i][j]=='*') return false; if(vis[i][j]) return false; return true; } void bfs(int i,int j) { vis[i][j]=true; node now(i,j); queue<node>q; q.push(now); while(!q.empty()) { node next=q.front(); q.pop(); vis[next.x][next.y]=true; int nx,ny; for(int i=0;i<8;i++) { nx=next.x+dir[i][0]; ny=next.y+dir[i][1]; if(check(nx,ny)) { node tmp(nx,ny); q.push(tmp); } } } }
int main() { while(cin>>m>>n) { if(m+n==0)break; memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>mp[i][j]; int cnt=0; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { if(mp[i][j]=='@'&&!vis[i][j]) { bfs(i,j); cnt++; } } cout<<cnt<<endl; } return 0; }
一开始想用bfs,结果超时了,本来以为数据量不是很大,不会出问题的,结果。。。。换用dfs。
#include<iostream> #include<string.h> using namespace std; int m,n; bool vis[101][101]; char mp[101][101]; int dir[8][2]={{-1,0},{1,0},{0,1},{0,-1},{-1,-1},{-1,1},{1,-1},{1,1}}; bool island(int i,int j) { if(i<1||i>m||j<1||j>n) return false; return true; } void dfs(int x,int y) { for(int i=0;i<8;i++) { if(!island(x+dir[i][0],y+dir[i][1])) continue; if(vis[x+dir[i][0]][y+dir[i][1]]) continue; if(mp[x+dir[i][0]][y+dir[i][1]]=='*')continue; vis[x+dir[i][0]][y+dir[i][1]]=true; dfs(x+dir[i][0],y+dir[i][1]); } } int main() { while(cin>>m>>n) { memset(vis,0,sizeof(vis)); int sum=0; if(m+n==0)break; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { cin>>mp[i][j];//cout<<"1"<<endl; } for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { if(mp[i][j]=='@'&&!vis[i][j]) { vis[i][j]=true; dfs(i,j); sum++; } } cout<<sum<<endl; } }
相关文章推荐
- [kuangbin带你飞]专题一 简单搜索K - 迷宫问题(POJ 3984)
- [kuangbin带你飞]专题一 简单搜索 C - Catch That Cow poj 3278
- 搜索专题 O
- 搜索专题 T
- 搜索专题 A
- [kuangbin带你飞]专题一 简单搜索 E
- [kuangbin带你飞]专题一 简单搜索 刷题总结
- phpcms 头部搜索栏上边的 “新闻 | 图片 | 下载 | 专题” 是在哪里修改的?
- 2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
- 搜索专题: HDU1372Knight Moves
- [kuangbin带你飞]专题一 简单搜索 L
- [kuangbin带你飞]专题一 简单搜索 J
- 【搜索入门专题1】I - Knight Moves hdu1372 c++queue的应用 【BFS】
- [kuangbin带你飞]专题二 搜索进阶 E
- 搜索专题(二)
- 集训第十天(2017/8/9):搜索专题最后一天,总结
- 暑期集训搜索专题(一)
- [算法专题] 二分搜索&排序数组
- 【暑假集训专题#搜索】
- 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开