limit-Memory Limit Exceed

问题描述

Memory Limit Exceed

#include
#include
using namespace std;
char map[200][200];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
struct save{
int x;
int y;
int time;
int next;
save(int a,int b,int c,int d):x(a),y(b),time(c),next(d){}
};
int main(){
int cases;
cin>>cases;
for(int i=0;i
int m,n,stx,sty,ans;
ans=0;
cin>>m>>n;
int visit[200][200];
for(int j=0;j
for(int k=0;k
cin>>map[j][k];
if(map[j][k]=='r') stx=j,sty=k;
}
queue q;
q.push(save(stx,sty,0,0));
while(!q.empty()){
save bf=q.front();
if(bf.next) q.push(save(bf.x,bf.y,bf.time+1,0));
else{
for(int t=0;t
if(bf.x+dx[t]>=0&&bf.x+dx[t]=0&&bf.y+dy[t]<n){
if(map[bf.x+dx[t]][bf.y+dy[t]]=='a'){
cout<<bf.time+1<<endl;
ans=1;
break;}
if(map[bf.x+dx[t]][bf.y+dy[t]]=='@'&&visit[bf.x+dx[t]][bf.y+dy[t]]==0){
q.push(save(bf.x+dx[t],bf.y+dy[t],bf.time+1,0));
visit[bf.x+dx[t]][bf.y+dy[t]]=1;}
if(map[bf.x+dx[t]][bf.y+dy[t]]=='x'&&visit[bf.x+dx[t]][bf.y+dy[t]]==0)
q.push(save(bf.x+dx[t],bf.y+dy[t],bf.time+1,1));
}
}
}
if(ans) break;
q.pop();
}
if(ans==0) cout<<"Impossible"<<endl;
}
return 0;
}

解决方案

公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M <= 200)的矩阵来表示。矩阵中的每项可以代表道路(@)、墙壁(#)、和守卫(x)。
英勇的骑士(r)决定孤身一人去拯救公主(a)。我们假设拯救成功的表示是“骑士到达了公主所在的位置”。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。
现假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要1个单位时间,杀死一个守卫需要花费额外的1个单位时间。同时假设骑士足够强壮,有能力杀死所有的守卫。

给定牢房矩阵,公主、骑士和守卫在矩阵中的位置,请你计算拯救行动成功需要花费最短时间。

输入
第一行为一个整数S,表示输入的数据的组数(多组输入)
随后有S组数据,每组数据按如下格式输入
1、两个整数代表N和M, (N, M <= 200).
2、随后N行,每行有M个字符。"@"代表道路,"a"代表公主,"r"代表骑士,"x"代表守卫, "#"代表墙壁。
输出
如果拯救行动成功,输出一个整数,表示行动的最短时间。
如果不可能成功,输出"Impossible"
样例输入
2
7 8
#@#####@
#@a#@@r@
#@@#x@@@
@@#@@#@#
#@@@##@@
@#@@@@@@
@@@@@@@@
13 40
@x@@##x@#x@x#xxxx##@#x@x@@#x#@#x#@@x@#@x
xx###x@x#@@##xx@@@#@x@@#x@xxx@@#x@#x@@x@
#@x#@x#x#@@##@@x#@xx#xxx@@x##@@@#@x@@x@x
@##x@@@x#xx#@@#xxxx#@@x@x@#@x@@@x@#@#x@#
@#xxxxx##@@x##x@xxx@@#x@x####@@@x#x##@#@
#xxx#@#x##xxxx@@#xx@@@x@xxx#@#xxx@x#####
#x@xxxx#@x@@@@##@x#xx#xxx@#xx#@#####x#@x
xx##@#@x##x##x#@x#@a#xx@##@#@##xx@#@@x@x
x#x#@x@#x#@##@xrx@x#xxxx@##x##xx#@#x@xx@
#x@@#@###x##x@x#@@#@@x@x@@xx@@@@##@@x@@x
x#xx@x###@xxx#@#x#@@###@#@##@x#@x@#@@#@@
#@#x@x#x#x###@x@@xxx####x@x##@x####xx#@x
#x#@x#x######@@#x@#xxxx#xx@@@#xx#x#####@

解决方案二:

有办法清空队列么

解决方案三:

是广度优先搜索吗?200*200的内存也会超吗?是不是哪里过度标记了?

时间: 2024-07-28 17:02:35

limit-Memory Limit Exceed的相关文章

iostream-如何解决memory limit exceed问题

问题描述 如何解决memory limit exceed问题 Description 输入一定量的单词(#结束),按字母顺序排序后输出,若有重复则只保留一个. Input Output Sample Input hello I how fine free if free final full all aware # Sample Output all aware final fine free full hello how I if 解决方案 这个嘛,可以用STL库中的"优先级队列"来

经典分享MySQL的limit查询优化

以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的.其他最为常用也是最为需要优化的就是limit.MySQL的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10        select * from yanxue8_visit limit 0,10     就不是一个数量级别的. 网上也很多关

深入研究mysql中的varchar和limit(容易被忽略的知识)

 为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题. 1.varchar(5)可以存储多少个汉字,多少个字母数字? 相信有好多人应该跟我一样,对这个已经很熟悉了,根据经验我们能很快的做出决定,比如说用varchar(200)去存储url等等,但是,即使你用了很多次也很熟悉了,也有可能对上面的问题做出错误的回答. 这个问题我查了好多资料,有

业务SQL那些事--慎用LIMIT

业务SQL那些事--慎用LIMIT 在业务中使用LIMIT限制SQL返回行数是很常见的事情,但如果不知道其中可能的坑或者说真正执行逻辑,就可能会使SQL执行非常慢,严重影响性能. LIMIT OFFSET, ROW_COUNT实现分页 业务反映一条SQL执行非常慢.简单分析,例如下面的schema与SQL(演示 databae:PostgreSQL): create table t(c1 varchar(20) primary key, c2 int); select * from t wher

数据-SQLite select limit

问题描述 SQLite select limit select * from WishData ORDER BY RANDOM() limit 5 limit 之后必须跟一个数字吗,我想每次读取的数据条数都不同.求解~~~ 解决方案 你是做手机应用的吧, 和你这么说,完全可以使用普通sql,找到合适的jdbc驱动就行,但需要和你说明一些事情. 如果是做普通pc机应用,一般是写单机版app,无所谓,带限制limit查询和不带限制limit查询都一样. 手机内存很宝贵的,也不是那么高效,limit是

mysql-Mysql中limit分页后将数据倒叙排列

问题描述 Mysql中limit分页后将数据倒叙排列 在MySQL中如何将分页的数据倒叙排列?比如取第10~20条数据,然后将数据倒叙排列 解决方案 mysql limit 分页mysql 分页用的limitmysql limit 分页 解决方案二: 先order by再limit.order by接你要排序的字段 解决方案三: 先用order by将所有数据都倒排序好,再用limit 9,10 解决方案四: select * from persons limit 10; 意思是,起点为0,开始

详解mysql的limit经典用法及优化实例_Mysql

用法一  复制代码 代码如下: SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1;  比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二  复制代码 代码如下: SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2,1;  而这个S

Mysql Limit 分页查询优化详解_Mysql

select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select * from table LIMIT 0,5; #返回前5行 我们来写分页 物理分页 select * from table LIMIT (当前页-1)*每页显示条数,每页显示条数; MySQL之Limit简单优化.md 同样是取90000条后100条记录,传统方式还是改造方式? 传统方式是先取了前90001条记录,取其中最

mysql limit的分页用法与性能优化

mysql教程 limit 的性能问题 有个几千万条记录的表 on mysql 5.0.x,现在要读出其中几十万万条左右的记录 常用方法,依次循环: select * from mytable where index_col = xxx limit offset, limit; 经验:如果没有blob/text字段,单行记录比较小,可以把 limit 设大点,会加快速度 问题:头几万条读取很快,但是速度呈线性下降,同时 mysql server cpu 99% 速度不可接受. 调用 explai