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. DOCKER 学习笔记9 Kubernetes (K8s) 弹性伸缩容器 下

    前言 从上一篇看来,我们已经对于Kubernetes ,通过minikube 建立集群,而后使用kubectl 进行交互,对Deployment 部署以及服务的暴露等.这节,将学习弹性的将服务部署到多 ...

  2. 基于CentOS-7 部署open

    一.OpenVPN概述 OpenVPN是一个用于创建专用网络加密通道的源软件.可在公司和家庭之间.部署类似于局域网的专用网络通道 而且OpenVPN使用起来也非常方便.几乎可以运行在任何平台.同时也采 ...

  3. 业余无线电A类考试准备笔记

    在线模拟自测地址:https://liunan.github.io/crac/ 共361题,到LK0074 1004/2890行 Key Word: 要合法 要服从管理 Note: 无线电管理 最高法 ...

  4. 【Codeforces #312 div2 A】Lala Land and Apple Trees

    # [Codeforces #312 div2 A]Lala Land and Apple Trees 首先,此题的大意是在一条坐标轴上,有\(n\)个点,每个点的权值为\(a_{i}\),第一次从原 ...

  5. Descriptor - Python 描述符协议

    描述符(descriptor) descriptor 是一个实现了 __get__. __set__ 和 __delete__ 特殊方法中的一个或多个的. 与 descriptor 有关的几个名词解释 ...

  6. 子组件获取父组件数据 propsDown, 父组件获取子组件数据 eventUp

    (一) popsDowm 三种方法获取父组件数据:被动获得(1):主动获取(2). 1.被动获得: 父组件:v-bind: 绑定变量参数和方法参数:子组件:props 接收参数.可以在模板中直接使用也 ...

  7. codewars--js--ten minutes walk

    题目: You live in the city of Cartesia where all roads are laid out in a perfect grid. You arrived ten ...

  8. StarUML之三、StarUML的项目

    1:创建空的项目 创建项目可以按Ctrl+N或选择菜单File| New,StarUML安装打开后默认会有个空项目结构. 2:创建模板项目 可以通过选择模板来启动建模项目(会根据模板创建项目结构). ...

  9. Android开发之adt bundle安装

    这个学期开了一门手机游戏开发的课,所以就接触到了adt bundle,Android开发环境有三种方式,分别是JDK+SDK+Eclipse+ADT.JDK+adt-bundle与JDK+Androi ...

  10. Kubernetes 部署 Nebula 图数据库集群

    Kubernetes 是什么 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes 提供了应 ...