BFS广度优先搜索(5)(亦可以用DFS)--hdu1241(poj1562)(基础题)
来源:互联网 发布:清华大学王斌算法考试 编辑:程序博客网 时间:2024/06/04 18:27
这道题就是给你一个二维数组,‘@’周围八个方向的‘@’都是属于同一块区域,问这个二维数组被分为几个区域。简单的BFS,直接向八个方向搜索,BFS与DFS两种方法我都写了,BFS代码:
#include<stdio.h>#include<string.h>#include<queue>using namespace std;char map[105][105];int vis[105][105];int n,m;int d[8][2]={{0,1},{0,-1},{1,0},{-1,0}, {1,1},{-1,-1},{-1,1},{1,-1}}; //八个方向struct node{int x;int y;};void Bfs(int x,int y){vis[x][y]=1;queue<node>q;node s,e;int i;s.x=x;s.y=y;q.push(s);while(!q.empty()){s=q.front();q.pop();for(i=0;i<8;i++){int xx=s.x+d[i][0];int yy=s.y+d[i][1];if(xx<0||yy<0||xx>=n||yy>=m)continue;if(map[xx][yy]=='*')continue;if(vis[xx][yy])continue;vis[xx][yy]=1;e.x=xx;e.y=yy;q.push(e);}}}int main(){int i,j;int ans;while(scanf("%d %d",&n,&m)!=EOF){if(!n&&!m)break;memset(vis,0,sizeof(vis));ans=0;for(i=0;i<n;i++){scanf("%s",map[i]);}for(i=0;i<n;i++){for(j=0;j<m;j++){if(map[i][j]=='@'&&!vis[i][j]){Bfs(i,j);ans++;}}}printf("%d\n",ans);}return 0;}
DFS代码:
#include<stdio.h>#include<string.h>int n,m;char map[105][105];int vis[105][105];int d[8][2]={{0,1},{0,-1},{1,0},{-1,0}, {1,1},{-1,-1},{-1,1},{1,-1}}; //八个方向void Dfs(int x,int y){int i;for(i=0;i<8;i++){int xx=x+d[i][0];int yy=y+d[i][1];if(xx<0||yy<0||xx>=n||yy>=m)continue;if(map[xx][yy]=='*')continue;if(vis[xx][yy])continue;vis[xx][yy]=1;Dfs(xx,yy);}}int main(){int i,j;int ans;while(scanf("%d %d",&n,&m)!=EOF){if(!n&&!m)break;ans=0;memset(vis,0,sizeof(vis));for(i=0;i<n;i++){scanf("%s",map[i]);}for(i=0;i<n;i++){for(j=0;j<m;j++){if(map[i][j]=='@'&&!vis[i][j]){Dfs(i,j);ans++;}}}printf("%d\n",ans);}return 0;}
两种方法:第一个是DFS
1 0
- BFS广度优先搜索(5)(亦可以用DFS)--hdu1241(poj1562)(基础题)
- BFS广度优先搜索(9)(亦可以用DFS)--poj1426
- DFS(深度优先搜索)与BFS(广度优先搜索)
- 深度优先搜索(DFS)与广度优先搜索(BFS)
- 深度优先搜索(DFS)&广度优先搜索(BFS)
- 【数据结构】深度优先搜索BFS和广度优先搜索DFS
- 深度优先搜索(DFS)与广度优先搜索(BFS)
- leetcode:深度优先搜索(DFS)和广度优先搜索(BFS)
- 【BFS】广度优先搜索&【DFS】深度优先搜索
- 深度优先搜索(DFS),广度优先搜索(BFS)
- 深度优先搜索和广度优先搜索( DFS&BFS )
- BFS广度优先搜索 DFS深度优先搜索 回溯算法
- BFS广度优先搜索(3)--poj2251(zoj1940)(基础题)
- BFS广度优先搜索(4)--hdu2717(poj3278)(基础题)
- BFS广度优先搜索(6)--poj3414(基础题)
- BFS广度优先搜索(7)--poj3126(基础题)
- BFS广度优先搜索(10)--fzu2150(基础题)
- BFS广度优先搜索(11)--hdu2102(基础题)
- Java反射中getXXX和getDeclaredXXX的解析
- final,finally,finalize的区别
- Linux_Ubuntu_openwrt_编译环境准备
- javax.mail.AuthenticationFailedException: 550
- 【LeetCode】240. Search a 2D Matrix II (Medium)
- BFS广度优先搜索(5)(亦可以用DFS)--hdu1241(poj1562)(基础题)
- 397.Longest Increasing Continuous Subsequence-最长上升连续子序列(容易题)
- 9.13总结
- Leetcode解题报告:215. Kth Largest Element in an Array
- java项目从win上布署到linux上报java.lang.ArrayIndexOutOfBoundsException错误
- Linux_Ubuntu_openWrt源码目录结构
- Linux 命令:wget
- mysql数据库设计小技巧
- LintCode:最长连续序列