恶心的题啊 。。

先枚举哪个点是所有人集合的点 再枚举所有骑士遇见国王的点 如果全部枚举出来会大大的TLE 经大牛验证 只需要枚举国王周围的点就可以了+-2 之内

然后各种繁琐 各种错误 骑士有可能不带着国王一块走 也可能在他周围选个点带着走 先预处理出来每个骑士到国王周围的最短距离 然后再按上面的枚举就可以了

考虑的不全面 。。错了好多个样例 样例2,6,19,20 都模拟了一遍。。还好错在小数据上 可以手算模拟一下 就知道哪错了 变量名都被我用穷了。。

 /*
ID: shangca2
LANG: C++
TASK: camelot
*/
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<cmath>
#include<queue>
#define INF 0x3f3f3f
using namespace std;
int vis[][],dis[][] = {{,},{,-},{,},{,-},{-,-},{-,},{-,},{-,-}};
typedef struct node
{
int x,y,num;
}st;
st qq[];
int o[][][][],x[],y[],n,m,ans,xx,yy,f[][],g;
int ff[][],di,s;
int judge(int x,int y)
{
if(x<=||y<=||x>n||y>m)
return ;
return ;
}
int bfs(int xi,int yi,int e1,int e2,int flag)
{
queue<st>q;
s=;int ss=;
memset(vis,,sizeof(vis));
memset(ff,,sizeof(ff));
int i;
st tt,te;
tt.x = xi;
tt.y = yi;
tt.num = ;
vis[xi][yi] = ;
q.push(tt);
int fff = ;
while(!q.empty())
{
tt = q.front();
q.pop();
if(flag&&tt.x==e1&&tt.y==e2)
{
fff = ;
return tt.num;
}
o[xi][yi][tt.x][tt.y] = tt.num;
o[tt.x][tt.y][xi][yi] = tt.num;
if(f[tt.x][tt.y])
ss+=tt.num;
if(ss>ans)
return -;
for(i = ;i < ; i++)
{
int tx = tt.x+dis[i][];
int ty = tt.y+dis[i][];
if(judge(tx,ty)&&!vis[tx][ty])
{
te.x = tx;
te.y = ty;
te.num = tt.num+;
vis[tx][ty] = ;
q.push(te);
}
}
}
if(flag&&!fff)
return INF;
for(i = ; i <= g ;i++)
s+=o[xi][yi][x[i]][y[i]];
return s;
}
int main()
{
freopen("camelot.in","r",stdin);
freopen("camelot.out","w",stdout);
int i,j,k,e,ee;
for(i = ;i <= ; i++)
for(j = ;j <= ; j++)
for(e = ;e <= ; e++)
for(ee = ;ee <= ; ee++)
o[i][j][e][ee] = INF;
char c;
ans = INF;
cin>>n>>m;
cin>>c>>xx;
yy = c-'A'+;
while(cin>>c>>k)
{
int yg = c-'A'+;
int xg = k;
g++;
x[g] = xg;
y[g] = yg;
f[xg][yg] = ;
}
int dd[][] = {,,,,,-,,,-,,,,,-,-,,-,-,,,,,,,,-,,-,
-,,-,,-,,-,-,-,-,,,,,-,,,-,,-,-,-};
for(e = ; e <= g ;e++)
{
for(ee = ; ee < ; ee++)
{
int tx = xx+dd[ee][];
int ty = yy+dd[ee][];
if(judge(tx,ty))
{
int oo = bfs(x[e],y[e],tx,ty,);
if(oo!=INF)
{
o[tx][ty][x[e]][y[e]] = oo;
o[x[e]][y[e]][tx][ty] = oo;
}
}
}
}
int dis = INF;
for(i = ; i <= n ; i++)
for(j = ; j <= m ; j++)
{
if(bfs(i,j,,,)<)
continue;
int ko = bfs(i,j,,,);
int tns = ko+max(abs(i-xx),abs(j-yy));
if(tns<ans)
ans = tns; if(g==)
ans = ko;
for(e = ; e <= g ;e++)
{
for(ee = ; ee < ; ee++)
{
int tx = xx+dd[ee][];
int ty = yy+dd[ee][];
int o1 = o[x[e]][y[e]][tx][ty],o2 = o[i][j][tx][ty],o3 = o[i][j][x[e]][y[e]];
if(o1==INF||o2==INF||o3==INF)
continue;
if(judge(tx,ty)&&ans>(o1+o2-o3+ko+max(abs(tx-xx),abs(ty-yy))))
{
ans = o1+o2-o3+ko+max(abs(tx-xx),abs(ty-yy));
}
}
}
}
cout<<ans<<endl;
return ;
}

usaco3.33Camelot(BFS)的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 深搜(DFS)广搜(BFS)详解

    图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...

  3. 【算法导论】图的广度优先搜索遍历(BFS)

    图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...

  4. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  5. 【BZOJ5492】[HNOI2019]校园旅行(bfs)

    [HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...

  6. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...

  7. 图的 储存 深度优先(DFS)广度优先(BFS)遍历

    图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...

  8. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  9. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...

随机推荐

  1. web服务器压力测试工具

    http_load 是运行在linux操作系统上的命令行测试工具, 用来对网站做压力测试. 下载地址:http://www.acme.com/software/http_load/http_load- ...

  2. WPFX名称空间

    1:x名称空间里的成员是专门写给xaml编译器看,用来引导xaml编译器把xaml代码编译成CLR代码的.(x仅仅是xaml的首字母). 2:attribute 是语言层面的东西,是给编译器看的,Pr ...

  3. APP评价(星星点赞)很简单

    1.用代码或者storyboard创建5个button(现在一般都是5个星星) 我用的是storyboard 记得一定要设置button的tag值 在.h中 @property (weak, nona ...

  4. asp.net:repeater嵌套(常用于新闻等在首页归类显示)

    using System;using System.Configuration;using System.Collections.Generic;using System.Linq;using Sys ...

  5. 关于arcgis 9.3破解问题详解

    对于初学GIS的同学,安装软件可能会遇到各种各样的问题,对于photoshop,autocad,sketchup,3dmax等软件我们的我们无非是输入特定序列号或者用工具随机生成特定序列号就可以破解, ...

  6. css样式继承 第7节

    样式继承: <html> <head> <title>样式继承</title> <style type="text/css"& ...

  7. 动态加载js、css 代码

    一.原生js: /** * 加载js和css文件 * @param jsonData.path 前缀路径 * @param jsonData.url 需要加载的js路径或css路径 * @param ...

  8. HDU 3008 Warcraft(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008 题目大意:人有100血和100魔法,每秒增加 t 魔法(不能超过100).n个技能,每个技能消耗 ...

  9. Android SDK镜像

    北京化工大学镜像站 http://ubuntu.buct.edu.cn/ 大连东软信息学院 http://mirrors.neusoft.edu.cn/ 中科院开源软件协会 http://mirror ...

  10. html5/css3响应式布局介绍及设计流程

    html5/css3响应式布局介绍 html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能.移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局 ...