Kilani and the Game

思路:这种扩散走法的并且有速度。我们需要一层一层的入队, 而且 根据题目要求 按编号处理 
例如q1队列中有 1 1 1 2 2 2 2 3 3 3 3 3 3 3  那么我们需要 把 id = 1 的一起处理

把 1 1 1 push 到 q2 然后只要不超过   s [  id = 1  ] 的速度 ,就一直进行bfs ,当到达了 s [ id = 1 ]的那些点可以放入q1中,

.

#include<bits/stdc++.h>
using namespace std;
#define maxn 1234
int to[5][3]= {{1,0},{0,1},{0,-1},{-1,0}};
char mmp[maxn][maxn];
int n,m,p,s[23],pre;
int dp[maxn][maxn],tong[55];
bool judge(int x,int y)
{
if(x<0||y<0||x>=n||y>=m)return false;
if(dp[x][y]!=0||mmp[x][y]=='#')return false;
return true;
}
struct node
{
int x,y,id,step;
} top,tp,op;
vector<node>st[25];
void bfs()
{
queue<node>q1,q2;
for(int i=1; i<=p; i++)
for(int j=0; j<st[i].size(); j++)
q1.push(st[i][j]);
pre=1;
while(!q1.empty())
{
top=q1.front();
while(top.id==pre&&!q1.empty())
{
q1.pop();
q2.push(top);
if(q1.empty())break;
top=q1.front();
}
pre=top.id;
while(!q2.empty())
{
op=q2.front();
q2.pop();
for(int i=0; i<4; i++)
{
tp=op;
tp.x+=to[i][0];
tp.y+=to[i][1];
if(judge(tp.x,tp.y))
{
tp.step++;
dp[tp.x][tp.y]=tp.id;
if(tp.step==s[tp.id])
tp.step=0,q1.push(tp);
else q2.push(tp);
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&p);
for(int i=1; i<=p; i++)
scanf("%d",&s[i]);
for(int i=0; i<n; i++)
{
scanf("%s",mmp[i]);
for(int j=0; j<m; j++)
{
if(mmp[i][j]!='#'&&mmp[i][j]!='.')
{
int id=mmp[i][j]-'0';
st[id].push_back(node{i,j,id,0});
dp[i][j]=id;
}
}
}
bfs();
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
tong[dp[i][j]]++;
for(int i=1; i<=p; i++)
{
printf("%d",tong[i]);
if(i<p)printf(" ");
else printf("\n");
}
return 0;
}

  

Kilani and the Game-扩散形式的搜索的更多相关文章

  1. todolist形式的搜索框,分开组件写的,点击上下键时,框内显示当前选中的内容

    ### 首先  安装react 脚手架 cnpm  install  create-react-app  -g      //只需要在电脑上安装一次就好了,以后不用再下载了 ### 创建项目 crea ...

  2. 转:在ElasticSearch之下(图解搜索的故事)

    ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我 ...

  3. poj--1579--(DFS+记忆化搜索之经典)

    记忆化搜索   记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用 动态规划的那种思想和模式作一些保存. 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态. 更重要的是搜索还可以 ...

  4. elasticsearch(4) 轻量搜索

    一 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档: 示例 GET 127.0.0.1:9200/_search 响应 { , "tim ...

  5. ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事)

    ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我 ...

  6. 张春晖让视频的每词每句都可搜索:Autotiming 可以自动配字幕,还将改变哪些领域?

    张春晖让视频的每词每句都可搜索:Autotiming 可以自动配字幕,还将改变哪些领域? 对于一些电视观众来说,寻找电视节目字幕中“有趣”的Bug,拍照发到网上与其他人共同嘲笑一下,是一种观看节目之外 ...

  7. Lucene.Net 学习(搜索部分)(低要求,写给自己看)

    1. 搜索 排序:lucene 提供了Sort类对结果进行排序 提供了Filter类对查询条件进行限制 你或许会不自觉地拿它跟SQL语句进行比较:“lucene能执行and.or.order by.w ...

  8. ElasticSearch搜索

    1.搜索---最基本的工具 我们可以将一个 JSON 文档扔到 Elasticsearch 里,然后根据 ID 检索.但 Elasticsearch 真正强大之处在于可以从无规律的数据中找出有意义的信 ...

  9. elasticsearch从入门到出门-03-多种搜索

    1.query string search 2.query DSL 3.query filter 4.full-text search 5.phrase search 6.highlight sear ...

随机推荐

  1. Entity Framework系列教程汇总

    翻译自http://www.entityframeworktutorial.net/,使用EF几年时间了,一直没有系统总结过,所以翻译这一系统文章作为总结,由于英语功底有限,翻译的可能有些问题,欢迎指 ...

  2. openwrt 编译

    完整的编译过程: http://www.280i.com/tech/3353.html源更新: https://blog.csdn.net/ypbsyy/article/details/8121836 ...

  3. docker使用方式

    docker使用方式安装:1.安装依赖 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 2添加yum源 yum-conf ...

  4. day 21 - 1 包,异常处理

    创建目录代码 1. 无论是 import 形式还是 from...import 形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法2. 包是目录级的(文 ...

  5. tp5.0 queue 队列操作

    检查是否安装redis(没有请自行百度安装): phpinfo: 配置thinkphp-queue,没有请执行 composer require topthink/think-queue 加入: 创建 ...

  6. java实现二叉树的建立以及实现二叉查找树的查、插、删、遍历

    一.采用存储结构 1.顺序存储:采用数组,顺序存储适配于完全二叉树,对于非完全二叉树并不合适,主要体现在空间上的浪费,所以我们需要用到另一种存储方式——链式存储. 2.链式存储:数据data用键值对的 ...

  7. LeetCode第二十二题-创建n对括号

    Generate Parentheses 问题简介: 给定n对括号,编写一个函数来生成格式正确的括号的所有组合. 举例: 给定n = 2,解集是: [ “()()”, “(())” ] 给定n = 3 ...

  8. MySQL对以特定名字开头的数据库进行授权

    对以"db_1"开头的数据库进行授权 grant all privileges on `db_1%`.* to dp_admin identified by 'password'; ...

  9. Abd学习笔记

    Abd学习笔记 V快捷键:转正坐标 Tab快捷键:切换xyz或是长度角度 空格键快捷键:切换长度或弧度 Enter快捷键:确定方向x或y O快捷键:做辅助线 E:切换平面,分别有t,f,s Ra:创建 ...

  10. 帆软报表(finereport)间格运算常用公式

    1.1在C3(占比)单元格中直接使用占比公式:=PROPORTION(B3):占比:当前值占总值的比例 1.2 计组内占比注:C2[!0]{A2=$A2},表示C2扩展出来地区相同的单元格.sum(C ...