codeforce gym/100495/problem/F Snake++——DFS应用
emmmm....
在被新生暴打后,我花了很久才补出这道DFS。由于WA1检查了半天,最后竟然是输出少了一个: ,心态小崩。
这里普通的dfs算出的连通区域并不能直接当做最后的答案。所以需要类似模拟的DFS来处理。
代码如下:
#include<iostream>
using namespace std;
int q[12][12];//用数组标记该位置是空地、食物、还是障碍。
int pd[12][12];//判断有没有走过
int maxx=0;//记录最大路径长度
int a,b,mb;//a,b记录起始坐标,mb记录目标长度
void dfs(int x,int y,int s)
{
if(s>maxx) maxx=s;
if(q[(x+a-1)%a][y]&&!pd[(x+a-1)%a][y])
{
pd[(x+a-1)%a][y]=1;
if(q[(x+a-1)%a][y]==1) dfs((x+a-1)%a,y,s+1);
else if(q[(x+a-1)%a][y]==2)dfs((x+a-1)%a,y,s);
pd[(x+a-1)%a][y]=0;
}
if(q[(x+a+1)%a][y]&&!pd[(x+a+1)%a][y])
{
pd[(x+a+1)%a][y]=1;
if(q[(x+a+1)%a][y]==1) dfs((x+a+1)%a,y,s+1);
else if(q[(x+a+1)%a][y]==2) dfs((x+a+1)%a,y,s);
pd[(x+a+1)%a][y]=0;
}
if(q[x][(y+b-1)%b]&&!pd[x][(y+b-1)%b])
{
pd[x][(y+b-1)%b]=1;
if(q[x][(y+b-1)%b]==1) dfs(x,(y+b-1)%b,s+1);
else if(q[x][(y+b-1)%b]==2) dfs(x,(y+b-1)%b,s);
pd[x][(y+b-1)%b]=0;
}
if(q[x][(y+b+1)%b]&&!pd[x][(y+b+1)%b])
{
pd[x][(y+b+1)%b]=1;
if(q[x][(y+b+1)%b]==1) dfs(x,(y+b+1)%b,s+1);
else if(q[x][(y+b+1)%b]==2) dfs(x,(y+b+1)%b,s);
pd[x][(y+b+1)%b]=0;
}
}
int main()
{
int i,r,l,s,t,xx,yy,j;
char k;
cin>>t;
l=1;
while(t--)
{
maxx=0;
cin>>a>>b>>mb;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
cin>>k;
if(k=='#') q[i][j]=0;
else if(k=='o') q[i][j]=2;
else if(k=='.') q[i][j]=1;
else if(k=='x')
{
xx=i;yy=j;q[xx][yy]=0;
}
pd[i][j]=0;
}
}
dfs(xx,yy,0);
if(maxx>=mb-1) cout<<"Case #"<<l++<<": Fits perfectly!"<<endl;
else cout<<"Case #"<<l++<<": Oh no, snake's too fat!"<<endl;
//cout<<maxx<<endl;
}
}
其中、比较值得注意的地方有两个。一个是蛇的“空间传送”。如何处理从a[0][k]到a[long-1][k]位置的行动。另一个是最后的比较,因为他要求全部出洞。而最后判断成功时尾巴一定是在洞口。所以可以直接把出生位置看成一个障碍(但是仍然从这里开始dfs),把长度-1. 还要注意,走到食物上时,长度会增加1,可以等效成“位置变化,长度不变”,来继续讨论。(因为如果改变全局变量mb的值,就会对dfs产生影响)
codeforce gym/100495/problem/F Snake++——DFS应用的更多相关文章
- codeforce gym/100495/problem/K—Wolf and sheep 两圆求相交面积 与 gym/100495/problem/E—Simple sequence思路简述
之前几乎没写过什么这种几何的计算题.在众多大佬的博客下终于记起来了当时的公式.嘚赶快补计算几何和概率论的坑了... 这题的要求,在对两圆相交的板子略做修改后,很容易实现.这里直接给出代码.重点的部分有 ...
- Codeforces Gym 100500F Problem F. Door Lock 二分
Problem F. Door LockTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/at ...
- Codeforces Gym 100002 Problem F "Folding" 区间DP
Problem F "Folding" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/ ...
- Codeforces Gym 100286F Problem F. Fibonacci System 数位DP
Problem F. Fibonacci SystemTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudg ...
- codeforces Gym 100187J J. Deck Shuffling dfs
J. Deck Shuffling Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem F. Judging Time Prediction 优先队列
Problem F. Judging Time Prediction 题目连接: http://www.codeforces.com/gym/100253 Description It is not ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题
Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...
- Gym - 100187J J - Deck Shuffling —— dfs
题目链接:http://codeforces.com/gym/100187/problem/J 题目链接:问通过洗牌器,能否将编号为x的牌子转移到第一个位置? 根据 洗牌器,我们可以知道原本在第i位置 ...
- 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥
Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...
随机推荐
- SQLServer 创建自己的数据库
1)进入数据库服务器,创建自己的数据库 use master go create database Dt_Devtest on primary(name=[Dt_new_data],filename= ...
- .net core创建项目(指令方式)
所谓的指令创建项目,就是不用再已安装的VS2015的环境下或者VS Core下创建,直接通过DOS指令创建也是OK的. 1.找到你所准备保存项目的项目文件夹(你也可以到某个目录用指令创建项目文件夹[ ...
- ui-router .state参数配置
.state('页面被引用时的变量名',{ template: '<h1>My Contacts</h1>',//被应用时插入的模板,状态被激活时,它的模板会自动插入到父状态对 ...
- N-Gram的基本原理
1.N-Gram的介绍 N-Gram是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关(这也是隐马尔可夫当中的假设).整个句子出现的概率就等于各个词出现的概率乘积.各个词的概率可以通 ...
- JDBC的DBUtils源码
DBUtils源码: package com.it.util; import java.sql.Connection; import java.sql.DriverManager; import ja ...
- 海瑞菌的web前端学习直播间
这是本人的web前端学习直播间 一般每天晚上10点--12点为直播时间...以web前端开发为主. 若设备无法打开,请点击链接进入:https://www.huya.com/14958154 setT ...
- 简单的MVC与SQL Server Express LocalDB
M模式: 类,表示数据的应用程序和使用验证逻辑以强制实施针对这些数据的业务规则. V视图: 应用程序使用动态生成 HTML 响应的模板文件. C控制器: 处理传入的浏览器请求的类中检索模型数据,然后指 ...
- tar+nc传输文件的使用
- An error occurred (500 Error)
Centos7 部署知乎出现上图问题 解决方法: [root@web02 ~]# vim /etc/php.ini #修改配置文件 session.auto_start = 0 #这条设置成0 [ro ...
- topcoder srm 400 div1
problem1 link 枚举指数,然后判断是不是素数即可. problem2 link 令$f[len][a][b][r]$(r=0或者1)表示子串$init[a,a+len-1]$匹配$goal ...