只记得当下的眼疼 , ok 各种数据也试了 , 就是 他娘的不对 , 我也是醉了 . 也是日了最野的狗

附上日了哮天犬的代码 , 这个题 先放放, 一段时间后再试试 , 明天开始状态压缩吧 .为期两天

今天早上 一眼就看出来了 代码的  漏洞 , 以后应该 自己想不出来的代码 让别人看看   ,   互相交换着看看

预处理 + 两重广搜

 #include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<string>
#include<sstream>
#include<map>
#include<cctype>
using namespace std;
int n,m,b[][]={,-,,,-,,,},minn,visited[][],vis[][];
char a[][];
struct monkey
{
int x,y,step;
};
queue<monkey>Q;
void pretreatment(int x,int y,char b,char c) //坐标 和 该名称 和 另一人名称
{
for(int i=x+;i<m&&a[y][i]!='X'&&a[y][i]!=c;i++)
a[y][i]=(a[y][i]=='d'?'O':b+);
for(int i=x-;i>=&&a[y][i]!='X'&&a[y][i]!=c;i--)
a[y][i]=(a[y][i]=='d'?'O':b+);
for(int i=y+;i<n&&a[i][x]!='X'&&a[i][x]!=c;i++)
a[i][x]=(a[i][x]=='d'?'O':b+);
for(int i=y-;i>=&&a[i][x]!='X'&&a[i][x]!=c;i--)
a[i][x]=(a[i][x]=='d'?'O':b+);
}
queue<monkey>W;
void BFSMORE(int x,int y,int step,char c)
{
monkey q={x,y,step};
W.push(q);
while(!W.empty())
{
monkey e=W.front();
W.pop();
for(int i=;i<;i++)
{
q.x=e.x+b[i][],q.y=e.y+b[i][];
if(a[q.y][q.x]!='X'&&a[q.y][q.x]!='D'&&a[q.y][q.x]!='E'&&q.x>=&&q.x<m&&q.y>=&&q.y<n&&!vis[q.y][q.x])
{
vis[q.y][q.x]=;
q.step=e.step+;
W.push(q);
if(a[q.y][q.x]==c||a[q.y][q.x]=='O')
{
minn=minn>q.step?q.step:minn;
while(!W.empty())
W.pop();
break;
}
}
}
}
}
void BFS(int x,int y)
{
monkey q={x,y,};
if(a[y][x]=='O')
{
minn=;
return ;
}
if(a[y][x]=='d')
{
memset(vis,,sizeof(vis));
BFSMORE(x,y,,'e');
}
if(a[y][x]=='e')
{
memset(vis,,sizeof(vis));
BFSMORE(x,y,,'d');
}
Q.push(q);
while(!Q.empty())
{
monkey e=Q.front();
Q.pop();
for(int i=;i<;i++)
{
q.x=e.x+b[i][],q.y=e.y+b[i][];
if(a[q.y][q.x]!='X'&&a[q.y][q.x]!='D'&&a[q.y][q.x]!='E'&&q.x>=&&q.x<m&&q.y>=&&q.y<n&&!visited[q.y][q.x])
{
q.step=e.step+;
Q.push(q);
visited[q.y][q.x]=;
if(a[q.y][q.x]=='O')
{
minn=minn>q.step?q.step:minn;
}
if(a[q.y][q.x]=='d')
{
memset(vis,,sizeof(vis));
BFSMORE(q.x,q.y,q.step,'e');
}
if(a[q.y][q.x]=='e')
{
memset(vis,,sizeof(vis));
BFSMORE(q.x,q.y,q.step,'d');
}
}
}
}
}
int main()
{
int sx,sy,dx,dy,ex,ey,t,count1=;
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
minn=t+;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
scanf(" %c",&a[i][j]);
if(a[i][j]=='S')
{
sx=j;
sy=i;
}
if(a[i][j]=='D')
{
dx=j;
dy=i;
}
if(a[i][j]=='E')
{
ex=j;
ey=i;
}
}
}
pretreatment(dx,dy,'D','E');
pretreatment(ex,ey,'E','D');
memset(visited,,sizeof(visited));
visited[sy][sx]=;
BFS(sx,sy);
printf("Case %d:\n",++count1);
if(minn<=t)
printf("%d\n",minn);
else
printf("-1\n");
}
return ;
}

NYOJ999 师傅又被妖怪抓走了的更多相关文章

  1. nyoj999 师傅又被妖怪抓走了 (预处理+bfs+状态压缩)

    题目999 题目信息 执行结果 本题排行 讨论区 师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝 ...

  2. nyoj 999——师傅又被妖怪抓走了——————【双广搜】

    师傅又被妖怪抓走了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥餐渴饮,悟 ...

  3. openjudge 大师兄,师傅被妖怪抓走啦

    描述 孙悟空听到沙僧大喊一句:“大师兄,师傅被妖怪抓走啦!”于是孙悟空直追白骨精而去.孙悟空在一条长度为L的森林小路上飞奔,上面有L+1个整点,依次为0,1,2……L.白骨精会使用一种大范围的攻击法术 ...

  4. shu_1548 悟空问题(大哥,主妖怪抓走的朋友!)

    http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=17 分析:  直接暴力了.. . 代码: #include <s ...

  5. fzu2172 字符串dp

    F - 巡了南山我巡北山 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit ...

  6. ZOJ3640Help Me Escape(师傅逃亡系列•一)(数学期望||概率DP)

    Background If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at ...

  7. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  8. FACTORY设计模式【让吃货也能理解的程序】

    一个人要有思想,技术再牛的人,如果没有一点点文化气氛,那么也是个码农,不能追到女朋友滴. 我这个人文化真心不多,但是比较喜欢读古诗文.虽然读完之后,记在脑海里的不多,不过,就讨一个喜欢[读]. Lee ...

  9. HTML学习笔记《一》 ---- HTML基本认识

    HTML 基本认识 一.简介 1.HTML是超文本标记语言,标准通用标记语言下的一个应用,解释性语言. 2.“超文本”就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 3.超文本标记语言的 ...

随机推荐

  1. linux中集群的免秘钥SSH直接登录

    这里以三台mysql的主从服务器为例:manage.master.slave1.slave2   给4个机器生成秘钥文件 以manage为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是: ...

  2. react特性-声明式编程

    网络上有很多关于声明式编程和命令式编程的对比和说明,但是大多都是大同小异,总的来说就是一句话"告诉电脑我要做什么,但是让电脑自己决定怎么做." 1.命令式编程. 这种编程模式比较常 ...

  3. HTML5轻松实现全屏视频背景

    想在你的网页首页中全屏播放一段视频吗?而这段视频是作为网页的背景,不影响网页内容的正常浏览.那么我告诉你有一款Javascript库正合你意,它就是Bideo.js. 参考网址: https://ww ...

  4. EF入门

    1.(安装EF)右键项目

  5. inet_XX族函数

    在网络编程中, 经常会将网络字节转为本地字节或者将本地字节转为网络字节, 但是如果每次我们都是都通过htonl, ntohl函数需要将10进制转为整数, 甚至还用将字符串转为整数, 再转为网络字节, ...

  6. 洛谷——P1613 跑路

    P1613 跑路 题目大意: 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B ...

  7. 使用Scrapy爬取图书网站信息

    重难点:使用scrapy获取的数值是unicode类型,保存到json文件时需要特别注意处理一下,具体请参考链接:https://www.cnblogs.com/sanduzxcvbnm/p/1030 ...

  8. webstorm下ES6转ES5

    ECMAScript 6是JavaScript语言的下一代标准,已经在2015年6月正式发布了.Mozilla公司将在这个标准的基础上,推出JavaScript 2.0. ES6的目标,是使得Java ...

  9. 【codeforces 509A】Maximum in Table

    [题目链接]:http://codeforces.com/contest/509/problem/A [题意] 给你一个递推式f[i][j] = f[i-1][j]+f[i][j-1]; 让你求f[i ...

  10. 在全局对象(不是指针)的构造函数里不要对std集合做太多操作

    写MaxvisionOnvif的时候,我用个宏把每个Command类注册到了CommandBuilder里面,通过全局对象初始化实现的,如下: void CommandBuilder::Registe ...