深度优先搜索(dfs),城堡问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度优先搜索(dfs),城堡问题相关的知识,希望对你有一定的参考价值。
题目链接:http://poj.org/problem?id=1164
1、深搜,每个点都访问一次,没有标记的话,就做深搜,同时标记。
#include <iostream> #include <algorithm> #include <cstring> using namespace std; int r,c; int rooms[60][60],color[60][60]; int MAX=0,NUM=0; int area; void dfs(int i,int j) { if(color[i][j]!=0) return ; else { color[i][j]=1; area++; if((rooms[i][j]&1)==0) dfs(i,j-1);///向西 if((rooms[i][j]&2)==0) dfs(i-1,j);///向北 if((rooms[i][j]&4)==0) dfs(i,j+1);///向东 if((rooms[i][j]&8)==0) dfs(i+1,j);///向南 } } int main() { cin>>r>>c; memset(color,0,sizeof(color)); for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) cin>>rooms[i][j]; for(int i=1; i<=r; i++) { for(int j=1; j<=c; j++) { if(color[i][j]==0) { NUM++; area=0; dfs(i,j); MAX=max(MAX,area); } } } cout<<NUM<<endl<<MAX; return 0; }
以上是关于深度优先搜索(dfs),城堡问题的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 988:回溯和深度优先搜索(DFS)的区别
数据结构与算法图遍历算法 ( 深度优先搜索 DFS | 深度优先搜索和广度优先搜索 | 深度优先搜索基本思想 | 深度优先搜索算法步骤 | 深度优先搜索理论示例 )