博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1979 Red and Black(dfs)
阅读量:4682 次
发布时间:2019-06-09

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

题目链接:

思路分析:使用DFS解决,与迷宫问题相似;迷宫由于搜索方向只往左或右一个方向,往上或下一个方向,不会出现重复搜索;

在该问题中往四个方向搜索,会重复搜索,所以使用vis表来标记访问过的点,避免重复搜索。

 

代码如下: 

#include 
using namespace std;const int MAX_N = 25;int vis[MAX_N][MAX_N];char map[MAX_N][MAX_N];int red_count, W, H;int Search( int i, int j ){ if ( i == 0 || i == H + 1 || j == 0 || j == W + 1 ) return 0; else if ( map[i][j] == '#' ) return 0; else if ( !vis[i][j] ) { vis[i][j] = 1; red_count++; Search( i-1, j ); Search( i+1, j ); Search( i, j-1 ); Search( i, j+1 ); } return 0;}int main(){ while ( scanf( "%d %d\n", &W, &H ) != EOF ) { int i_start, j_start; red_count = 0; memset( map, 0, sizeof(map) ); memset( vis, 0, sizeof(vis) ); if ( W == 0 && H == 0 ) break; for ( int h = 1; h <= H; ++h ) for ( int w = 1; w <= W; ++w ) { scanf( "%c", &map[h][w] ); if ( map[h][w] == '@' ) { i_start = h; j_start = w; } scanf( "\n" ); } Search( i_start, j_start ); cout << red_count << endl; } return 0;}

 

转载于:https://www.cnblogs.com/tallisHe/p/4020958.html

你可能感兴趣的文章
润乾报表 动态控制文本的显示
查看>>
[oracle] 如何使用myBatis在数据库中插入数据并返回主键
查看>>
PHP echo 和 print 语句
查看>>
第一讲 一个简单的Qt程序分析
查看>>
Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
查看>>
poj 1979 Red and Black(dfs)
查看>>
【.Net基础03】HttpWebRequest模拟浏览器登陆
查看>>
UML-画类图与交互图的顺序
查看>>
6月7 考试系统
查看>>
mysql 基本操作
查看>>
zTree async 动态参数处理
查看>>
Oracle学习之常见错误整理
查看>>
HTC Sensation G14开盒
查看>>
lock_sga引起的ksvcreate :process(m000) creation failed
查看>>
数据库插入数据乱码问题
查看>>
OVER(PARTITION BY)函数用法
查看>>
altium annotate 选项设置 complete existing packages
查看>>
【模式识别与机器学习】——SVM举例
查看>>
【转】IT名企面试:微软笔试题(1)
查看>>
IO流入门-第十章-DataInputStream_DataOutputStream
查看>>