BFS廣度優先搜尋(5)(亦可以用DFS)--hdu1241(poj1562)(基礎題)
這道題就是給你一個二維陣列,‘@’周圍八個方向的‘@’都是屬於同一塊區域,問這個二維陣列被分為幾個區域。簡單的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
相關文章
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- bfs廣度優先搜尋
- 【演算法】廣度/寬度優先搜尋(BFS)演算法
- 演算法競賽——BFS廣度優先搜尋演算法
- 廣度優先搜尋(BFS)思路及演算法分析演算法
- 0演算法基礎學演算法 搜尋篇第二講 BFS廣度優先搜尋的思想演算法
- 深度DFS 和 廣度BFS搜尋演算法學習演算法
- ybtoj:廣度優先搜尋
- DFS(深度優先搜尋)
- 圖的遍歷:深度優先搜尋與廣度優先搜尋
- c++ 廣度優先搜尋(寬搜)C++
- 圖的廣度優先搜尋和深度優先搜尋Python實現Python
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- js版本的(廣、深)度優先搜尋JS
- 【演算法】深度優先搜尋(DFS)演算法
- python實現圖(基於圖的不同儲存方式)的深度優先(DFS)和廣度(BFS)優先遍歷Python
- 【程式碼隨想錄】廣度優先搜尋
- 演算法筆記(廣度優先搜尋)演算法筆記
- 深度和廣度優先搜尋演算法演算法
- 深度優先搜尋演算法(DFS)講解演算法
- 深度優先搜尋演算法-dfs講解演算法
- 深度優先搜尋 (Depth First Search 簡稱:DFS)
- dfs深度優先搜尋解決迷宮類問題(遍歷)
- 「Golang成長之路」迷宮的廣度優先搜尋Golang
- DFS與BFS——理解簡單搜尋(中文虛擬碼+例題)
- 深度優先搜尋(DFS)思路及演算法分析演算法
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- JAVA圖搜尋演算法之DFS-BFSJava演算法
- golang學習筆記——迷宮的廣度優先搜尋Golang筆記
- 演算法(三):圖解廣度優先搜尋演算法演算法圖解
- 0基礎學演算法 搜尋篇第一講 深度優先搜尋演算法
- 學習資料結構 - 深度優先搜尋 DFS 記錄資料結構
- 遞迴——深度優先搜尋(DFS)——以滑雪問題為例(自頂而下)遞迴
- 深度優先搜尋
- leetcode 刷題之深度優先搜尋LeetCode
- (BFS廣度優先演算法) 油田問題演算法
- POJ1915,雙向寬度優先搜尋
- ybtoj:深度優先搜尋