题意:推箱子游戏

代码写错居然卡内存!!

搞了两天了

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue> using namespace std;
char s[][];
int d[][]={,,,,-,,,-};
int n,m,tt;
struct node
{
int x,y;
};
struct all
{
node a[];
int t;
}st,ed;
bool vis[][][][][][][][]; bool aim[][];
bool ok(all e)
{
for(int i=;i<;i++)
{
if(!aim[e.a[i].x][e.a[i].y])
{
return false;
}
}
return true;
}
queue<all> q;
void bfs()
{
all now,next;
memset(aim,false,sizeof(aim));
memset(vis,false,sizeof(vis));
while(!q.empty()) q.pop();
q.push(st);
for(int i=;i<;i++)
aim[ed.a[i].x][ed.a[i].y]=true;
while(!q.empty())
{
now=q.front();
q.pop();
if(ok(now))
{
printf("%d\n",now.t);
return;
}
//printf("%d %d %d %d %d %d %d %d %d\n",now.a[3].x,now.a[3].y,now.a[0].x,now.a[0].y,now.a[1].x,now.a[1].y,now.a[2].x,now.a[2].y,now.t);
if(vis[now.a[].x][now.a[].y][now.a[].x][now.a[].y][now.a[].x][now.a[].y][now.a[].x][now.a[].y])
continue;
vis[now.a[].x][now.a[].y][now.a[].x][now.a[].y][now.a[].x][now.a[].y][now.a[].x][now.a[].y]=true;
for(int i=;i<;i++)
{
int nx=now.a[].x+d[i][]; //人的移动
int ny=now.a[].y+d[i][];
if(s[nx][ny]=='#'||nx<||nx>=n||ny<||ny>=m) continue;
int j;
for(j=;j<;j++) //人撞到箱子
{
if(nx==now.a[j].x&&ny==now.a[j].y)
{
break;
}
}
if(j>=) //并没有推到箱子
{
next=now;
next.a[].x=nx,next.a[].y=ny;
next.t++;
q.push(next);
}
else //推到箱子
{
nx+=d[i][],ny+=d[i][]; //箱子移动
if(nx<||nx>=n||ny<||ny>=m||s[nx][ny]=='#') continue;
int k=;
for(k=;k<;k++)
{
if(nx==now.a[k].x&&ny==now.a[k].y)
{
break;
}
}
if(k>=) //箱子旁边并没有其他箱子
{
next=now;
next.a[].x=nx-d[i][],next.a[].y=ny-d[i][]; //人的坐标
next.a[j].x=nx,next.a[j].y=ny; //箱子坐标
next.t++;
q.push(next);
}
}
}
}
printf("-1\n");
}
int main()
{
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d%d",&n,&m)!=EOF)
{
int cnt1=,cnt2=;
for(i=;i<n;i++)
{
scanf("%s",s[i]);
for(j=;j<m;j++)
{
if(s[i][j]=='X')
{
st.a[].x=i,st.a[].y=j;
}
else if(s[i][j]=='*')
{
st.a[cnt1].x=i,st.a[cnt1++].y=j;
}
else if(s[i][j]=='@')
{
ed.a[cnt2].x=i,ed.a[cnt2++].y=j;
}
if(s[i][j]!='#') s[i][j]='.';
}
}
st.t=;
bfs();
}
return ;
}

hdu 1732 bfs的更多相关文章

  1. hdu 4531 bfs(略难)

    题目链接:点我 第一次不太清楚怎么判重,现在懂了,等下次再做 /* *HDU 4531 *BFS *注意判重 */ #include <stdio.h> #include <stri ...

  2. hdu 1732 Push Box

    http://acm.hdu.edu.cn/showproblem.php?pid=1732 推箱子和游戏规则一样. #include <cstdio> #include <cstr ...

  3. HDU 2822 (BFS+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2822 题目大意:X消耗0,.消耗1, 求起点到终点最短消耗 解题思路: 每层BFS的结点,优先级不同 ...

  4. HDU 1180 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...

  5. HDU 2531 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2531 题目大意: 你的身体占据多个点.每次移动全部的点,不能撞到障碍点,问撞到目标点块(多个点)的最 ...

  6. HDU 5025 (BFS+记忆化状压搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5025 题目大意: 迷宫中孙悟空救唐僧,可以走回头路.必须收集完钥匙,且必须按顺序收集.迷宫中还有蛇, ...

  7. HDU 1429 (BFS+记忆化状压搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1429 题目大意:最短时间内出迷宫,可以走回头路,迷宫内有不同的门,对应不同的钥匙. 解题思路: 要是 ...

  8. HDU 1026 (BFS搜索+优先队列+记录方案)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 题目大意:最短时间内出迷宫.迷宫里要杀怪,每个怪有一定HP,也就是说要耗一定时.输出方案. 解 ...

  9. HDU 1312 (BFS搜索模板题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:问迷宫中有多少个点被访问. 解题思路: DFS肯定能水过去的.这里就拍了一下BFS. ...

随机推荐

  1. PyTorch快速入门教程七(RNN做自然语言处理)

    以下内容均来自: https://ptorch.com/news/11.html word embedding也叫做word2vec简单来说就是语料中每一个单词对应的其相应的词向量,目前训练词向量的方 ...

  2. SQLServer数据操作(建库、建表以及数据的增删查改)[转]

    SQLSever数据操作   一.建立数据库:   create database DB ---数据库名称 (          name=data1 --文件名,          filename ...

  3. [MySQL优化案例]系列 — 优化InnoDB表BLOB列的存储效率

    首先,介绍下关于InnoDB引擎存储格式的几个要点:1.InnoDB可以选择使用共享表空间或者是独立表空间方式,建议使用独立表空间,便于管理.维护.启用 innodb_file_per_table 选 ...

  4. Android Bander设计与实现 - 设计

    Binder Android IPC Linux 内核 驱动 摘要 Binder是Android系统进程间通信(IPC)方式之一.Linux已经拥有管道,system V IPC,socket等IPC ...

  5. 一步一步搭建 oracle 11gR2 rac+dg之grid安装(四)【转】

    一步一步在RHEL6.5+VMware Workstation 10上搭建 oracle 11gR2 rac + dg 之grid安装 (四) 转自 一步一步搭建 oracle 11gR2 rac+d ...

  6. MVC 视图页对数字,金额 用逗号 隔开(数字格式化)

    cshtml页面代码: <tr> <th>@Model.BankName</th> <th>@Model.Month</th> <th ...

  7. WebApi参数问题方案

    原文:http://www.cnblogs.com/landeanfen/p/5337072.html

  8. 深度解析eclipse控制台

    第一个按钮:scroll lock 控制台在打印sql语句的时候会一直滚动,用这个按钮可以固定住控制台不乱跑; 第二个按钮:show console when standard out changes ...

  9. 修饰符(动态String数组篇)--- 常用 解除疑问。

    1.无修饰符----是直接传基本类型的地址过来,并没有把基本类型的指针复制一份入栈,所以一旦修改就是修改原来的值. 2.const 修饰符 与 无修饰符一致. 3.var修饰符 与 上一致. 4.ou ...

  10. SQL SERVER 比较两个数据库中表和字段的差异

    在开发过程中线上的数据库表字段和本地数据库表字段是存在的,也许我们在本地数据库中所增加的表字段都会有记录到SQL文件中,但当增加的表及字段名称较多时总会出现漏网之鱼,发布真是版本的时候回出现很多很多的 ...