博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单搜索专题的笔记
阅读量:6379 次
发布时间:2019-06-23

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

回溯法一般都会是把函数定义为bool类型的,因为这样才可以在底层return true;

https://vjudge.net/contest/215603#problem/K

如果不是记录路径的回溯法的话,一般会把dfs或者bfs定义为void类型

 

 

数组类型的深度搜索问题,一般会用上打表并且bool flag[][]类型的数组也必不可少,用来记录路径,防止死循环

数组类型:https://vjudge.net/contest/215603#problem/C

 

 

二维数组或者是三维数组,也就是题目的input是以

***##.

**.##

这种形式给出的话,一般要定义一个结构体数组,这样的话,才可以把它的坐标做入栈或者入队处理。

还有一般这种问题都是要遍历4个或者6个或者是8个(三维)方向的,那么可以在一开始就定义一个数组dir[4][2]={

{1,0},{0,1},{-1,0},{0,-1}};这样子,然后如果是用广度优先搜索的话,就可以遍历四个方向,确定要不要入队,不要就continue;
多维数组问题:https://vjudge.net/contest/215603#problem/B

以下是hdu 1241的题目:

 Oil Deposits

#include
#include
#include
#include
using namespace std;int r,c;char mp[105][105];bool flg[105][105];int dir[8][2]={
{
1,0},{
0,1},{-1,0},{
0,-1},{-1,-1},{-1,1},{
1,1},{
1,-1}};struct node{ int x; int y;};void bfs(int x,int y){ node no,ne; no.x=x;no.y=y; queue
q; q.push(no); while(q.size()) { no=q.front(); q.pop(); for(int i=0;i<8;i++) { ne.x=no.x+dir[i][0]; ne.y=no.y+dir[i][1]; if(ne.x<0||ne.x>=r||ne.y<0||ne.y>=c||mp[ne.x][ne.y]=='*') continue; if(!flg[ne.x][ne.y]) { flg[ne.x][ne.y]=true; q.push(ne); } } }}int main(){ while(scanf("%d %d",&r,&c)!=EOF&&r&&c) { int ans=0; memset(mp,'*',sizeof(mp)); memset(flg,false,sizeof(flg)); for(int i=0;i
>mp[i][j]; for(int i=0;i

 

转载于:https://www.cnblogs.com/myxdashuaige/p/8822702.html

你可能感兴趣的文章
.bashrc和.bash_profile的区别
查看>>
让你的PHP程序真正的实现多线程(PHP多线程类)(转)
查看>>
Java JDBC 基础知识
查看>>
search-a-2d-matrix——二维矩阵找数
查看>>
lua基础【三】唯一数据结构table表
查看>>
Web应用安全审计工具WATOBO
查看>>
CSS3_animation笔记
查看>>
Android Google 地图 API for Android
查看>>
从 Zero 到 Hero ,一文掌握 Python--转
查看>>
【软件下载】整理一些外国的工具软件下载到网盘方便国内使用
查看>>
idea项目左边栏只能看到文件看不到项目结构
查看>>
idea如何编译maven项目
查看>>
在centos7下安装svn
查看>>
删除软链接
查看>>
windows7下MSN如何最小化到任务栏
查看>>
HDU-3016 Man Down 线段树
查看>>
初步认识注册表(待续)
查看>>
只能输入数字的TextBox自定义控件
查看>>
自定义事件
查看>>
浮点数的二进制
查看>>