Lightoj 1066 Gathering Food (bfs)
Description
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 size N 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 are k letters, then it will be from the first k alphabets. Suppose k = 3, that means there will be exactly one A, one B 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 collects A, then B, then C 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 next N lines contains N 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
4
5
A....
####.
..B..
.####
C.DE.
2
AC
.B
2
A#
#B
3
A.C
##.
B..
Sample Output
Case 1: 15
Case 2: 3
Case 3: Impossible
Case 4: Impossible
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#include <cstring> using namespace std;
char data[][];
int ki,kj,si,sj,n;
int visit[][];
int to[][]={{,},{,-},{,},{-,}}; struct node
{
int x,y;
int step;
char a;
}; int go(int i,int j)
{
if(i>=&&i<=n&&j>=&&j<=n&&data[i][j]!='#')
return ;
return ;
} int bfs()
{
node st,ed;
queue <node> q;
st.x=ki;
st.y=kj;
st.step=;
st.a='A';
memset(visit,,sizeof(visit));
visit[ki][kj]=;
data[ki][kj]='.';
q.push(st);
while(!q.empty())
{
st=q.front();
q.pop();
if(st.x==si&&st.y==sj)
{
cout<<st.step<<endl;
return ;
}
for(int i=;i<;i++)
{
ed.x=st.x+to[i][];
ed.y=st.y+to[i][];
if(go(ed.x,ed.y)&&visit[ed.x][ed.y]==)
{
if((int)(st.a)+==(int)data[ed.x][ed.y])
{
ed.step=st.step+;
ed.a=data[ed.x][ed.y];
data[ed.x][ed.y]='.';
memset(visit,,sizeof(visit));
visit[ed.x][ed.y]=;
while(!q.empty()) q.pop();
q.push(ed);
break;
}
else if(data[ed.x][ed.y]=='.')
{
visit[ed.x][ed.y]=;
ed.step=st.step+;
ed.a=st.a;
q.push(ed);
}
}
}
}
cout<<"Impossible"<<endl;
return ;
} int main()
{
int t,k=;
cin>>t;
while(t--)
{
cin>>n;
k++;
char max='A';
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
cin>>data[i][j];
if(data[i][j]=='A')
{
ki=i;kj=j;
}
if(data[i][j]<='Z'&&data[i][j]>='A'&&data[i][j]>max)
{
si=i;sj=j;
max=data[i][j];
}
}
if(max=='A')
{
cout<<"Case "<<k<<": 0"<<endl;
continue;
}
cout<<"Case "<<k<<": ";
bfs();
}
return ;
}
Lightoj 1066 Gathering Food (bfs)的更多相关文章
- LightOJ——1066Gathering Food(BFS)
1066 - Gathering Food PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB W ...
- LightOJ 1009 二分图染色+BFS/种类并查集
题意:有两个阵营的人,他们互相敌对,给出互相敌对的人,问同个阵营的人最多有多少个. 思路:可以使用种类并查集写.也可以使用使用二分图染色的写法,由于给定的点并不是连续的,所以排序离散化一下,再进行BF ...
- lightoj 1099【dijkstra/BFS】
题意: 求 1-N 的第二长路,一条路可以重复走 if two or more shortest paths exist, the second-shortest path is the one wh ...
- lightoj刷题日记
提高自己的实力, 也为了证明, 开始板刷lightoj,每天题量>=1: 题目的类型会在这边说明,具体见分页博客: SUM=54; 1000 Greetings from LightOJ [简单 ...
- LightOJ 1012 简单bfs,水
1.LightOJ 1012 Guilty Prince 简单bfs 2.总结:水 题意:迷宫,求有多少位置可去 #include<iostream> #include<cstr ...
- Lightoj 1174 - Commandos (bfs)
题目链接: Lightoj 1174 - Commandos 题目描述: 有一军队秉承做就要做到最好的口号,准备去破坏敌人的军营.他们计划要在敌人的每一个军营里都放置一个炸弹.军营里有充足的士兵,每 ...
- 暑期训练狂刷系列——Lightoj 1084 - Winter bfs
题目连接: http://www.lightoj.com/volume_showproblem.php?problem=1084 题目大意: 有n个点在一条以零为起点的坐标轴上,每个点最多可以移动k, ...
- lightoj 1111 - Best Picnic Ever(dfs or bfs)
题目链接 http://www.lightoj.com/volume_showproblem.php?problem=1111 题意:给你一个有向图再给你几个人的位置,问所有人可以在哪些点相聚. 简单 ...
- poj 1066 Treasure Hunt (Geometry + BFS)
1066 -- Treasure Hunt 题意是,在一个金字塔中有一个宝藏,金字塔里面有很多的墙,要穿过墙壁才能进入到宝藏所在的地方.可是因为某些原因,只能在两个墙壁的交点连线的中点穿过墙壁.问最少 ...
随机推荐
- [MFC] 编辑框 EditControl 输入数字范围限制
在MFC中,项目需要对编辑框EditControl的数字输入范围进行限制,主要有以下实现方式,各有优缺点,个人推荐第三种. 第一种:添加变量 为编辑框添加int.float变量的时候,可以填写最大值与 ...
- 今天学习的裸板驱动之存储控制器心得(初始化SDRAM)
CPU只管操作地址,而有些地址代表的是某些存储设备. 但是操作这些存储设备需要很多东西,比如需要制定bank,行/列地址等.所以就有了存储管理器,用来处理这种CPU操作的地址和存储设备间的转换. (1 ...
- tcp异常终止连接
服务端: #include <sys/socket.h> #include <unistd.h> #include <sys/types.h> #include & ...
- ajax加php实现简单的投票效果
废话少说,作为一个前端猿,首先上前端的代码. 1.上html代码: <!DOCTYPE html> <html> <head lang="en"> ...
- JVM调优实战
JVM调优实战 文档修订记录 版本 日期 撰写人 审核人 批准人 变更摘要 & 修订位置 ...
- 基于 Consul 的 Docker Swarm 服务发现
Docker 是一种新型的虚拟化技术,它的目标在于实现轻量级操作系统的虚拟化.相比传统的虚拟化方案,Docker 虚拟化技术有一些很明显的优势:启动容器的速度明显快于传统虚拟化技术,同时创建一台虚拟机 ...
- Qt 外观之一 ——Qt Style Sheet
Qt Style Sheet 目录 使用 对于应用程序 创建自定义控件 QSS语法 一般选择器(selector) 伪选择器 解决冲突 使用specificity Namespace冲突 级联效应 设 ...
- .a与.framework的区别
库是共享程序代码的方式,一般分为静态库和动态库. 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. iOS中静态库形式: .a和.framework 动态库:链接时不复制,程序运行 ...
- c#简单易用的短信发送服务 悠逸企业短信服务
悠逸企业短信发送服务,是一种比较简单易操作的短信发送服务,使用POST的方式,请求相应地址就可以实现短信发送功能 1 /// <summary> /// 短信发送服务 /// </ ...
- xml文件查找重复元素(超简单版)
使用WPS,新建一个表格文件,将xml拖入表格,点数据,选中存在重复项的列,点高亮重复项,OK.