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-扩散形式的搜索的更多相关文章
- todolist形式的搜索框,分开组件写的,点击上下键时,框内显示当前选中的内容
### 首先 安装react 脚手架 cnpm install create-react-app -g //只需要在电脑上安装一次就好了,以后不用再下载了 ### 创建项目 crea ...
- 转:在ElasticSearch之下(图解搜索的故事)
ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我 ...
- poj--1579--(DFS+记忆化搜索之经典)
记忆化搜索 记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用 动态规划的那种思想和模式作一些保存. 一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态. 更重要的是搜索还可以 ...
- elasticsearch(4) 轻量搜索
一 空搜索 搜索API的最基础的形式是没有指定任何查询的空搜索 ,它简单地返回集群中所有索引下的所有文档: 示例 GET 127.0.0.1:9200/_search 响应 { , "tim ...
- ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事)
ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事) 摘要 先自上而下,后自底向上的介绍ElasticSearch的底层工作原理,试图回答以下问题: 为什么我 ...
- 张春晖让视频的每词每句都可搜索:Autotiming 可以自动配字幕,还将改变哪些领域?
张春晖让视频的每词每句都可搜索:Autotiming 可以自动配字幕,还将改变哪些领域? 对于一些电视观众来说,寻找电视节目字幕中“有趣”的Bug,拍照发到网上与其他人共同嘲笑一下,是一种观看节目之外 ...
- Lucene.Net 学习(搜索部分)(低要求,写给自己看)
1. 搜索 排序:lucene 提供了Sort类对结果进行排序 提供了Filter类对查询条件进行限制 你或许会不自觉地拿它跟SQL语句进行比较:“lucene能执行and.or.order by.w ...
- ElasticSearch搜索
1.搜索---最基本的工具 我们可以将一个 JSON 文档扔到 Elasticsearch 里,然后根据 ID 检索.但 Elasticsearch 真正强大之处在于可以从无规律的数据中找出有意义的信 ...
- elasticsearch从入门到出门-03-多种搜索
1.query string search 2.query DSL 3.query filter 4.full-text search 5.phrase search 6.highlight sear ...
随机推荐
- .NET框架 - NETFramework + API + EF(DBFirst) + MYSQL
.NET框架 - NETFramework + MVC+ EF(DBFirst) + MYSQL 1. 安装3个MYSQL插件 ①mysql-for-visualstudio-1.2.8 vs的 ...
- Linux中errno的含义
/****************************获取错误代码描述**************/ #include <string.h>#include <errno.h&g ...
- Phoenix(SQL On HBase)
1.简介 Phoenix是一个HBase框架,可以通过SQL的方式来操作HBase. Phoenix是构建在HBase上的一个SQL层,是内嵌在HBase中的JDBC驱动,能够让用户使用标准的JDBC ...
- 异常详细信息: System.IO.FileLoadException: 未能加载文件或程序集“Office, Version=7.0.3300.0,
导出Excel程序调试起来很正常,发布到服务器上却出错. 错误:未能加载文件或程序集“Office, Version=2.2.0.0, Culture=neutral, PublicKeyToken= ...
- 虚拟机14安装kail Linux
需要准备虚拟机和kail Linux镜像 1. 2.选择镜像安装,并且添加你的kail Linux镜像文件. 3. 4.在这里需要修改虚拟机名称,也可以不修改就用默认,然后在修改kail Linux的 ...
- spring基于XML的声明式事务控制
<?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.sp ...
- selenium+webservice进行百度登录
from selenium import webdriverimport time driver = webdriver.Chrome()driver.get("https://www.ba ...
- 我的react+material-ui之路
在学习react和material-ui时我遇到的问题和解决方法 react要安装得在当前文件夹下面安装, npm命令在当前文件夹执行 npm install -g全局安装, 不会安装在当前包下 np ...
- day08 文件操作
1.三种字符串: (1)u'' 普通字符串 ---> u'abc' ---> 默认的文本方式,以字符作为文本的输出方式 (2)b'' 二进制字符串 ---> b'ASCII码' -- ...
- Mongodb 安装错误汇总
Failed to restart mongod.service: Unit mongod.service not found. 解决方法: Most probably unit mongodb.se ...