lightoj1066【BFS】
题意:
就是按照A->B->C->D....去拿,求步数;
思路:
有一个注意点:如果碰到合法字母吃掉,再以后的某次可以重新到改点;
BFS的因为标记而减少了重复位置的到达,但是按照题目,窝从A->B吃了B以后,我后面还是要以合法并且最短的方法到C,所以...
有一种方法,就是我BFS最多26次,每次走个A->B/B->C/C->D/.../Y->Z,一步一步走;
还有就是搞一个BFS,然后中间初始化一下就好了。
总的还是相同的。
这道题目深刻地理解BFS就是起点到终点的一个过程~(●'◡'●)也像走一步再走一步
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int>PII;
const double eps=1e-5;
const double pi=acos(-1.0);
const int mod=1e9+7;
const int INF=0x3f3f3f3f;
char ma[15][15];
bool vis[15][15];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0}; int n;
struct asd{
int x,y;
int step;
}; int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%s",ma[i]);
bool flag;
int flat=0;//记录终点字母;
int sx,sy; for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(ma[i][j]=='A')
{
sx=i;
sy=j;
}
if(ma[i][j]>='A'&&ma[i][j]<='Z')
{
if(ma[i][j]>flat)
flat=ma[i][j];
}
}
}
printf("Case %d: ",cas++);
if(!flat)
{
puts("Impossible");
continue;
}
memset(vis,0,sizeof(vis));
queue<asd>q;
while(!q.empty())
q.pop();
asd now,ne;
int ans,num;
now.x=sx;
now.y=sy;
now.step=0;
vis[sx][sy]=1;
num=1;
ans=0;
flag=false;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
if(ma[now.x][now.y]==('A'+num))
{
ans+=now.step;
if(flat==('A'+num)) //如果是终点,再见;
{
flag=true;
break;
}
num++; //初始化,以这个点为起点,搜下一个字母;
memset(vis,0,sizeof(vis));
while(!q.empty())
q.pop();
now.step=0;
vis[now.x][now.y]=1;
}
for(int i=0;i<4;i++)
{
int x=now.x+dx[i];
int y=now.y+dy[i];
if(x<0||y<0||x>=n||y>=n||vis[x][y]||ma[x][y]=='#'||ma[x][y]>('A'+num))
continue;
vis[x][y]=1;
ne.x=x;
ne.y=y;
ne.step=now.step+1;
q.push(ne);
}
}
if(flag||flat=='A')
printf("%d\n",ans);
else
puts("Impossible");
}
return 0;
}
/*
2
CB
.A
3
A..
.BD
#C#
*/
lightoj1066【BFS】的更多相关文章
- 【bfs】抓住那头牛
[题目] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000),牛位于点K(0≤K≤100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次 ...
- 【bfs】拯救少林神棍(poj1011)
Description 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度.请你 ...
- 【bfs】Knight Moves
[题目描述] 输入nn代表有个n×nn×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个nn,表示测试样例 ...
- 【bfs】1252 走迷宫
[题目描述] 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...
- 【bfs】献给阿尔吉侬的花束
[题目描述] 阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫.今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪.现在研究员们想 ...
- 【bfs】迷宫问题
[题目描述] 定义一个二维数组: int maze[5][5] = { 0,1,0,0,0, 0,1,0,1,0, 0,0,0,0,0, 0,1,1,1,0, 0,0,0,1,0, }; 它表示一个迷 ...
- 【bfs】仙岛求药
[题目描述] 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由M×N个方格组成,有的 ...
- 【bfs】BZOJ1102- [POI2007]山峰和山谷Grz
最后刷个水,睡觉去.Bless All! [题目大意] 给定一个地图,为FGD想要旅行的区域,地图被分为n*n的网格,每个格子(i,j) 的高度w(i,j)是给定的.若两个格子有公共顶点,那么他们就是 ...
- poj3278-Catch That Cow 【bfs】
http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
随机推荐
- VC ++6.0英文版常用菜单使用参考【转载整理】
(1)File菜单 New:打开“new”对话框,以便创建新的文件.工程或工作区. Close Workspace:关闭与工作区相关的所有窗口. Exit:退出VC6环境,将提示保存窗口内容等. (2 ...
- 深入理解Java:注解(Annotation)自己定义注解入门
深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的 ...
- Java面向对象编程(一)
由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...
- 【BZOJ4952】lydsy七月月赛 E 二分答案
[BZOJ4952]lydsy七月月赛 E 题面 题解:傻题...二分答案即可,精度有坑. #include <cstdio> #include <cstring> #incl ...
- GCJ Qualification Round 2016 B题
经典的翻饼问题,直接做:从下往上看,已翻好的饼忽略掉:从上往下,连续的已翻好的一起翻过来:整个翻过来. /* * Author : ben */ #include <cstdio> #in ...
- sharding-jdbc源码学习(一)简介
背景 对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问.采用Master-Slave复制模式的MySQL架构,只能够对数据库的读进行扩展,而对数据 ...
- Cisco设备参数总结
Cisco设备参数总结 1.MAC与TCAM的区别:两张表所其作用的环境不同,MAC表是全局表,一般通过全局CPU进程转发需要查看MAC表,但是,现在基本都是硬件快速转发,那么这个时候就生成了CAM表 ...
- Java 递归算法,遍历文件夹下的所有文件。
用递归算法遍历文件下的所有子文件夹和子文件 文件夹遍历方法 public void getFileList(String strPath){ File f=new File(strPath); try ...
- codeforces Codeforces Round #273 (Div. 2) 478B
B. Random Teams time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 看 迪杰斯特拉(Dijsktra)算法体会
迪杰斯特拉 看啊哈算法中迪杰斯特拉算法体会: 算法思路 : 1.先找到源头到其他点的最短路: 2.以最短路作为中转点进行比较,用一个dis数组保存源头到他的最优距离 3.用循环进行最优筛选: #inc ...