LightOJ——1066Gathering Food(BFS)
| Time Limit: 2 second(s) | Memory Limit: 32 MB |
Winter is approaching! The weather is getting colder and days are becoming shorter. The animals take different measures to adjust themselves during this season.
- Some of them "migrate." This means they travel to other places where the weather is warmer.
- Few animals remain and stay active in the winter.
- Some animals "hibernate" for all of the winter. This is a very deep sleep. The animal's body temperature drops, and its heartbeat and breathing slow down. In the fall, these animals get ready for winter by eating extra food and storing it as body fat.
For this problem, we are interested in the 3rd example and we will be focusing on 'Yogi Bear'.
Yogi Bear is in the middle of some forest. The forest can be modeled as a square grid of sizeN x N. Each cell of the grid consists of one of the following.
. an empty space
# an obstacle
[A-Z] an English alphabet
There will be at least 1 alphabet and all the letters in the grid will be distinct. If there arek letters, then it will be from the firstk alphabets. Supposek = 3, that means there will be exactly oneA, oneB and one C.
The letters actually represent foods lying on the ground. Yogi starts from position'A' and sets off with a basket in the hope of collecting all other foods. Yogi can move to a cell if it shares an edge with the current one. For some superstitious reason, Yogi decides to collect all the foods in order. That is, he first collectsA, thenB, thenC and so on until he reaches the food with the highest alphabet value. Another philosophy he follows is that if he lands on a particular food he must collect it.
Help Yogi to collect all the foods in minimum number of moves so that he can have a long sleep in the winter.
Input
Input starts with an integer T (≤ 200), denoting the number of test cases.
Each case contains a blank line and an integer N (0 < N < 11), the size of the grid. Each of the nextN lines containsN characters each.
Output
For each case, output the case number first. If it's impossible to collect all the foods, output'Impossible'. Otherwise, print the shortest distance.
Sample Input |
Output for Sample Input |
|
4 5 A.... ####. ..B.. .#### C.DE. 2 AC .B 2 A# #B 3 A.C ##. B.. |
Case 1: 15 Case 2: 3 Case 3: Impossible Case 4: Impossible |
最近找回上学期遗留的题目做做,发现BFS果然比DFS简单。很多都是无脑拓展……,这题有一个坑点就是取过字母的地方还是可以走的,然而就看成一个点 "." 即可,因为这个WA数次……
代码:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
#define MMINF(x) memset(x,INF,sizeof(x))
typedef long long LL;
const double PI=acos(-1.0);
const int N=13;
char pos[N][N];
int vis[N][N];
struct info
{
int x;
int y;
int step;
info(){}
info(int xx,int yy):x(xx),y(yy){}
};
info direct[4];
info operator+(info a,info b)
{
info c;
c.x=a.x+b.x;
c.y=a.y+b.y;
c.step=a.step+b.step;
return c;
}
int r,n;
char goal;
int check(info v)
{
if(v.x>=0 && v.y>=0 && v.x<n && v.y<n && (pos[v.x][v.y]=='.'||pos[v.x][v.y]==goal) && (!vis[v.x][v.y]))
return 1;
return 0;
}
int zuobiao[2][30];
int main(void)
{
int tcase,i,j,cnt;
direct[0].x=1;direct[0].y=0;direct[0].step=1;
direct[1].x=-1;direct[1].y=0;direct[1].step=1;
direct[2].x=0;direct[2].y=1;direct[2].step=1;
direct[3].x=0;direct[3].y=-1;direct[3].step=1;
scanf("%d",&tcase);
for (int q=1; q<=tcase; q++)
{
MM(pos);
MM(vis);
scanf("%d",&n);
cnt=0;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
cin>>pos[i][j];
if(pos[i][j]>='A'&&pos[i][j]<='Z')
{
zuobiao[0][pos[i][j]-'A']=i;
zuobiao[1][pos[i][j]-'A']=j;
cnt++;
}
}
}
goal='B';
r=0;
bool done=true;
for (int w=0; w<cnt; w++)
{
MM(vis);
if(!done)
break;
done=false;
info t=info(zuobiao[0][w],zuobiao[1][w]);
t.step=0;
queue<info>Q;
Q.push(t);
vis[t.x][t.y]=1;
pos[t.x][t.y]='.';
while (!Q.empty())
{
info no=Q.front();
Q.pop();
if(pos[no.x][no.y]==goal)
{
goal++;
pos[no.x][no.y]='.';
r+=no.step;
done=true;
break;
}
for (i=0; i<4; i++)
{
info v=no+direct[i];
if(check(v))
{
Q.push(v);
vis[v.x][v.y]=1;
}
}
}
}
(goal=='A'+cnt||cnt==0)?printf("Case %d: %d\n",q,r):printf("Case %d: Impossible\n",q);
}
return 0;
}
LightOJ——1066Gathering Food(BFS)的更多相关文章
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
- HDU.2612 Find a way (BFS)
HDU.2612 Find a way (BFS) 题意分析 圣诞节要到了,坤神和瑞瑞这对基佬想一起去召唤师大峡谷开开车.百度地图一下,发现周围的召唤师大峡谷还不少,这对基佬纠结着,该去哪一个...坤 ...
随机推荐
- 系统报错undefine not symbol armv7
libz.dylib libsqlite3.dylib libstdc++.dylib 添加这些动态链接库
- HDU 4341 Gold miner (分组背包)
先把线按照距离原点的距离排序,然后用叉积把在同一条直线上的点放在一起, 把在同一条线上的点中的前i个点当成一个点就转化成了分组背包. 写if(kas++) putchar('\n') 居然PE了,PE ...
- UVA 10003 cuting sticks 切木棍 (区间dp)
区间dp,切割dp[i][j]的花费和切法无关(无后效性) dp[i][j]表示区间i,j的花费,于是只要枚举切割方法就行了,区间就划分成更小的区间了.O(n^3) 四边形不等式尚待学习 #inclu ...
- Ace 在Vue中使用方法
var Vue = require('vue/dist/vue.common.js'); document.querySelector('body').append(document.createEl ...
- 关于bootstrap栅格系统的五等分以及八等分代码
众所周知,bootstrap的栅格系统是基于十二等分的,今天拿到设计的设计稿一看,发现一个图片list上只有8张图片,然后上网查资料,发现只能自己写css代码实现,故写博客记录代码. 以下是八等分的代 ...
- linux or msys2设置网络代理
在文件 .bashrc 中添加 export http_proxy="proxy IP:port" 如 export http_proxy="192.168.0.1:80 ...
- ExtJs如何使用自定义插件动态保存表头配置(隐藏或显示)
关于保存列表表头的配置,一般我们不需要与后台交互,直接保存在 localStorage 中就能满足常规使用需求(需要浏览器支持). 直接上代码,插件: Ext.define('ux.plugin.Co ...
- CSS实现跳动的桃心
又来刷题--CSS动画实现跳动的桃心,从哪里跌倒就从哪里爬起来,哈哈哈~ 分析:首先,得画出一个桃心,然后再用动画效果让它跳起来(关于动画,实在是弱项啊~~~,得补补了). 第一步:画桃心,思路是一个 ...
- sscanf的使用
sscanf的使用 语法 int ssanf(const char *buffer, const char *format,[argument]...); 参数 buffer 存储的数据 format ...
- laravel中的视图合成器
==================================================================================================== ...
