DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止。(个人理解)

下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题...

P1596 [USACO10OCT] 湖计数Lake Counting

DFS入门题,求连通块的。

 #include<iostream>
#include<algorithm>
using namespace std;
int dx[]={-,-,-, , , ,,};//方向
int dy[]={-, , ,-, ,-,,};
char mapp[][];//地图
int n,m; void dfs (int x,int y)
{
int nx,ny;
mapp[x][y]='.';//每进入一个状态就把这个点去掉,避免重复进入DFS
for (int i=;i<;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if (nx<||nx>=n||ny<||ny>=m)
continue;
if (mapp[nx][ny]=='W')//如果‘.’也能走的话,那整块图都可以走了...
dfs(nx,ny);//进入到下一个状态
}
return ;
} int main()
{
scanf("%d %d",&n,&m);
int fin=;
for (int i=;i<n;i++)
scanf("%s",mapp[i]);//这样读一行
for (int i=;i<n;i++)
{
for (int j=;j<m;j++)
{
if (mapp[i][j]=='W')
{
dfs(i,j);//每次DFS一遍后,整块湖泊就算填平了
fin++;
}
}
}
printf("%d\n",fin);
return ;
}

P1506 拯救oibh总部

可以用上面一道题的思路代,方向从八向变为四向

要模拟一下海浪冲到总部上,这次读入地图的时候我给它先套了一圈“海浪”,从海浪中的一点出发,dfs一遍,如果是没有被保护的基地就被淹了,剩下的遍历一遍就行

 #include<iostream>
#include<algorithm>
using namespace std;
int n,m;
char mm[][];
int dx[]={,,,-};
int dy[]={,-,,};
void dfs(int x,int y)
{
mm[x][y]='*';
int nx,ny;
for (int i=;i<;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if (nx>=&&nx<=n+&&ny>=&&ny<=m+&&mm[nx][ny]=='')
dfs(nx,ny);
}
return ;
}
int main()
{
int fin=;
for (int i=;i<;i++)
for (int j=;j<;j++)
mm[i][j]='';
cin>>n>>m;
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
cin>>mm[i][j];
dfs(,);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (mm[i][j]=='')
fin++;
cout<<fin;
return ;
}

P1076 全排列问题

上面两道不需要管回溯,所以很简单

全排列最大的问题就是有一个回溯的过程

记一下这个题的运行过程,假如输一个3

1没被用过,选1,填1,进dfs(2)

找到2没被用过,选2填2,进dfs(3)

找到3没被用过,选3填3,进dfs(4)

满足输出条件,输出

此时,回到了dfs(3)的时候,现在把num[3]化为0

回到了dfs(2)的时候,把num[2]化为0,现在还在for循环中,转到num[3]=0,于是pai[2]=3

类推,输出完1 3 2之后,回到dfs(1),for循环到2,从2开头搜....

反正我真的想了很久没想通回溯,自己写一下就好了

#include <cstdio>
#include <iostream>
using namespace std;
int n;
int num[]={};
int pai[]={};
void dfs(int x)
{
if (x==n+)//就是n个格子都被填满的时候,这时候需要输出
{
for (int i=;i<=n;i++)
printf("%5d",pai[i]);
printf("\n");
}
else
{
for (int i=;i<=n;i++)
{
if (num[i]==)//找到了一个还没用的数字
{
num[i]=;//标记一下
pai[x]=i;//把数填进去
dfs(x+);//搜下一个数
num[i]=;//回溯
}
}
}
}
int main ()
{
scanf("%d",&n);
dfs();//从第一位开始搜起
return ;
}

咸鱼的ACM之路:DFS水题集的更多相关文章

  1. poj1564 Sum It Up dfs水题

    题目描述: Description Given a specified total t and a list of n integers, find all distinct sums using n ...

  2. ACM :漫漫上学路 -DP -水题

    CSU 1772 漫漫上学路 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit ...

  3. 【wikioi】1229 数字游戏(dfs+水题)

    http://wikioi.com/problem/1229/ 赤裸裸的水题啊. 一开始我认为不用用完全部的牌,以为爆搜会tle.. 可是我想多了. 将所有状态全部求出,排序后暴力判断即可. (水题有 ...

  4. DFS水题 URAL 1152 False Mirrors

    题目传送门 /* 题意:一个圈,每个点有怪兽,每一次射击能消灭它左右和自己,剩余的每只怪兽攻击 搜索水题:sum记录剩余的攻击总和,tot记录承受的伤害,当伤害超过ans时,结束,算是剪枝吧 回溯写挫 ...

  5. 中南大学2019年ACM寒假集训前期训练题集(入门题)

    A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...

  6. 【省选水题集Day1】一起来AK水题吧! 题目(更新到B)

    题解:http://www.cnblogs.com/ljc20020730/p/6937954.html 水题A: [AHOI2001]质数和分解 题目网址: https://www.luogu.or ...

  7. 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)

    题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数 ...

  8. ACM:SCU 4437 Carries - 水题

    SCU 4437  Carries Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu  Practice  ...

  9. poj 1979 Red and Black(dfs水题)

    Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...

随机推荐

  1. 使用递归函数用来输出n个元素的所有子集(数据结构、算法与应用)

    例如,三个元素的集合A = {a,b,c}的所有子集是:空集a,b,c,ab,ac,bc,abc,共八个 分析: 对于集合A中的每个元素,在其子集中都可能存在或者不存在,所以A的子集有23种. 可以设 ...

  2. NR / 5G - MAC Overview

  3. [1天搞懂深度学习] 读书笔记 lecture I:Introduction of deep learning

    - 通常机器学习,目的是,找到一个函数,针对任何输入:语音,图片,文字,都能够自动输出正确的结果. - 而我们可以弄一个函数集合,这个集合针对同一个猫的图片的输入,可能有多种输出,比如猫,狗,猴子等, ...

  4. Matplotlib数据可视化(1):入门介绍

      1 matplot入门指南¶ matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来 ...

  5. 写入时复制(CopyOnWrite)

    一.CopyOnWrite 思想 写入时复制(CopyOnWrite,简称COW)思想是计算机程序设计领域中的一种通用优化策略.其核心思想是,如果有多个调用者(Callers)同时访问相同的资源(如内 ...

  6. Vue.js 起步

    通过实例来看下 Vue 构造器中需要哪些内容 测试时这段代码我直接写在index.html中 <!DOCTYPE html> <html> <head> <m ...

  7. 方法中this指向的问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Linux中screen命令

    screen是一款由GNU计划开发的用于命令行终端切换的自由软件.用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换.GNU Screen可以看作是窗口管理器的命令行界面版本.它提 ...

  9. Centos8(Liunx) 中安装PHP7.4 的三种方法和删除它的三种方法

    编译安装 Centos8下PHP源码编译和通过yum安装的区别和以后的选择 其实这两种方法各有千秋: yum安装: 从yum安装来说吧,yum相当于是自动化帮你安装,你不用管软件的依赖关系,在yum安 ...

  10. 升级了NinjaLoveFish Excel量化表格

    为了方便查看均价和止盈值,新建了两列 这样做的好处就是,针对一个股票,可以实现不同的多个网格布局,然后分别实现各自的盈利设定. 例如这是网格1 那么同时也可以存在网格2 就可以实现多个网格布局到一个股 ...