博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 572 - Oil Deposits 搜索专题
阅读量:4074 次
发布时间:2019-05-25

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

11158
58.77%
5511
95.30%
题目链接:

题目类型: 搜索

样例输入:

1 1*3 5*@*@***@***@*@*1 8@@****@*5 5****@*@@*@*@**@@@@*@@@**@0 0

样例输出:

0122

分析:

这一题可以说是搜索中最基础的一题之一。 要找出相连在一起的有多少块, 因此, 依次枚举,遇到@时就进行搜索,用深搜,广搜都行,目的是把相连的@都标记为已访问。

下面给出用DFS(深搜)和BFS(广搜)的代码。

代码1: DFS

#include
#include
#include
using namespace std;int m,n;int dir[8][2] = {
{-1,0},{-1,1},{0,1},{1,1}, { 1,0},{1,-1},{0,-1},{-1,-1}};bool vis[105][105];char map[105][105];void dfs(int x, int y){ for(int i=0; i<8; ++i){ int dx=x+dir[i][0], dy=y+dir[i][1]; if(dx>=0 && dx
=0 && dy
代码2: 

以上是用递归的方式进行DFS,但是如果数据量很大, 递归方式有可能栈溢出的危险!

下面是模拟栈的方式,而不是递归的方式写DFS

#include
#include
#include
#include
using namespace std;int m,n;int dir[8][2] = {
{-1,0},{-1,1},{0,1},{1,1}, { 1,0},{1,-1},{0,-1},{-1,-1}};bool vis[105][105];char map[105][105];struct Node{ int x,y; };stack
st;void dfs(int x, int y){ while(!st.empty()) st.pop(); Node temp; temp.x = x, temp.y = y; st.push(temp); while(!st.empty()){ temp = st.top(); st.pop(); for(int i=0; i<8; ++i){ int dx=temp.x+dir[i][0], dy=temp.y+dir[i][1]; if(dx>=0 && dx
=0 && dy

代码3: BFS

#include
#include
#include
using namespace std;int m,n;int dir[8][2] = {
{-1,0},{-1,1},{0,1},{1,1}, { 1,0},{1,-1},{0,-1},{-1,-1}};bool vis[105][105];char map[105][105];struct Node{ int x,y; };Node que[10000];void bfs(int x,int y){ int front=0, rear=1; que[0].x = x; que[0].y = y; while(front < rear){ Node t=que[front++]; for(int i=0; i<8; ++i){ int dx=t.x+dir[i][0], dy=t.y+dir[i][1]; if(dx>=0 && dx
=0 && dy
——      生命的意义,在于赋予它意义。 
                   原创 
 , By   D_Double

转载地址:http://zyzni.baihongyu.com/

你可能感兴趣的文章
RedHat + OS CPU、MEM、DISK
查看>>
net TCP/IP / TIME_WAIT / tcpip / iperf / cain
查看>>
webServer kzserver/1.0.0
查看>>
OS + Unix IBM Aix basic / topas / nmon / filemon / vmstat / iostat / sysstat/sar
查看>>
my ReadMap subway / metro / map / ditie / gaotie / traffic / jiaotong
查看>>
OS + Linux DNS Server Bind
查看>>
linux下安装django
查看>>
Android 解决TextView设置文本和富文本SpannableString自动换行留空白问题
查看>>
最完整的Java IO流学习总结
查看>>
Android开发中Button按钮绑定监听器的方式完全解析
查看>>
Android自定义View实现商品评价星星评分控件
查看>>
postgresql监控工具pgstatspack的安装及使用
查看>>
postgresql查看表的和索引的情况,判断是否膨胀
查看>>
postgresql中根据oid和filenode去找表的物理文件的位置
查看>>
postgresql减少wal日志生成量的方法
查看>>
swift中单例的创建及销毁
查看>>
获取App Store中App的ipa包
查看>>
iOS 关于pods-frameworks.sh:permission denied报错的解决
查看>>
设置RGBColor
查看>>
设置tabbaritem的title的颜色及按钮图片
查看>>