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. Part1-解线性方程组

    自己一边听课一边记得,参考网上广为流传的那本<MIT线性代数笔记>,转成Latex上传太麻烦,直接截图上传了,需要电子版的可以私信我.

  2. idea快速创建一个类 实现一个接口

    一 创建一个接口类 二  点击接口名称 按alt + ent 三 选择implement interface 选项 完美!!!!!!!

  3. VFP控制Excel操作集

    ◆访问EXCEL:ExcelSheet = GetObject('','Excel.Sheet')返回结果为类,则成功.例:ExcelSheet = GetObject('','Excel.Sheet ...

  4. [MacOS]Chrome 强制刷新

    Chrome 调试的时候经常发现缓存没有清理 MacOS :⌘+⇧+r Windows:Ctrl + F5

  5. 在Linux安装MySQL

    yum 方式卸载MySQL与安装MySQL . rpm -qa | grep -i mysql命令查看已经安装过的组件 [root@VM_0_10_centos ~]# rpm -qa | grep ...

  6. Springboot feign 传递request信息

    基础实现 requestInterceptor 实现类中添加信息 public class NativeFeignConf { @Bean public RequestInterceptor getR ...

  7. clr via c# 程序集加载和反射集(一)

    1,程序集加载---弱的程序集可以加载强签名的程序集,但是不可相反.否则引用会报错!(但是,反射是没问题的) //获取当前类的Assembly Assembly.GetEntryAssembly() ...

  8. 远程服务器返回错误:(414)Request-URI Too Large

    近期因为疫情原因,一直是在家办公了,也导致了和同事对接接口上出现了很多小问题,这也从侧面反映出我个人对项目的设计不全面. 上面是对接接口时产生的一个问题:远程服务器返回错误:(414)Request- ...

  9. Android布局管理器-使用LinearLayout实现简单的登录窗口布局

    场景 Android布局管理器-从实例入手学习相对布局管理器的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1038389 ...

  10. Session注销后,浏览器后退仍显示Session信息

    初学JavaWeb,在一次测试登录功能的时候,发现了登进去后,点击退出按钮注销session,浏览器按后退能够显示session信息,并且点击登录还能够不输入密码登录(前端页面没写JS限制输入后登录) ...