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个数任意一个的倍 ...
随机推荐
- 变量为空代表false
name = ''#名字为空即代表False while not name:#not name=False即 真,将执行循环体 print('Enter your name:') name = inp ...
- mysql+servlet+jsp实现数据库的增删改查
首先,了解数据库目前我们仅仅用来存放数据,在这里我们在数据库中生成一个表,包含id,classname,teacher,location.Tomcat用来配置eclipse,只有这样我们才能使用JSP ...
- Java国际化号码验证方法,国内手机号正则表达式
Java国际化号码验证方法,国内手机号正则表达式 中国电信号段 133.149.153.173.177.180.181.189.199 中国联通号段 130.131.132.145.155.156.1 ...
- win7 怎么设置开机直接进入桌面? netplwiz 命令
电脑没设置密码,开机如何跳过帐户已锁定的界面,直接进入桌面呢? 1.单击[运行],或按快捷键:win+r2.输入命令:netplwiz 单击[确定]3.单击你的登录账户4.去掉[要使用本机,用户名必须 ...
- ymPrompt,jcs缓存架构
jcs.auxiliary.LTCP=org.apache.jcs.auxiliary.lateral.socket.tcp.LateralTCPCacheFactory#jcs.auxiliary. ...
- brctl 命令详解
安装网桥管理工具包:bridge-utile ```# yum install bridge-utils -y``` ```使用brctl命令创建网桥br1```# brctl addbr br1`` ...
- Python+OpenCV图像处理(六)—— ROI与泛洪填充
一.ROI ROI(region of interest),感兴趣区域.机器视觉.图像处理中,从被处理的图像以方框.圆.椭圆.不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI. 代码如下 ...
- mysql01
CREATE TABLE `student`( `studentNo` INT (4) NOT NULL PRIMARY KEY COMMENT '学号', `loginPwd` VARCHAR(20 ...
- VS调试dll详细过程记录
前言: 在我们写的程序中有时候调用dll,并且需要跟踪dll中的函数,此时直接调试调用dll的工程是 ...
- Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [org.jboss.netty.util.internal.ByteBufferUtil]. The following stack
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been ...