1259: 跳跳
Time Limit: 1 Sec
Memory Limit:
128 MB
SUBMIT: 164
Solved: 34
[SUBMIT][STATUS]
Description
一个每块地板标记着0~9某个数字的迷宫,其中标记1的地板不可以走,标记2~9的地板可以不花时间地跳到任意相同数字的位置,也可以和标记0的地板一样向前后左右任意方向花1个单位时间移动1的距离。给出起点和终点,求起点到终点的最短时间。
Input
每组数据第一行一个n,表示尺寸,2 <= n <= 100。
接下来n行每行n个0~9的字符,或S表示起点,E表示终点,S和E的运动规则与0相同。整个地图只有一个S和一个E。
Output
每组数据输出一个数,占一行,表示起点到终点可以花费的最短时间。
如果无法到达重点,输出"Oh No!"
Sample Input
5
0S100
00131
00300
00000
003E0
3
S12
010
10E
Sample Output
4
Oh No!
/*比赛的时候不知道脑子怎么了 犯浑 哎 痛失积分啊 比赛结束 回去一小搞 就过了 好可伶 又感觉好差劲啊自己 哎 看着自己的名次 真的有点心痛 感觉付出那么多 怎么就那么点收获 哎 还是把抱怨的时间放在看代码上吧 加油!!! 付出总会有回报 从小学到高中 一直被验证 我相信这句话以后也会被一次次的验证 我会努力的 今天我败了 明天我会更有劲头 我就不信没有我出头的一天 加油!!!*/
/*一开始思路也有点小问题 应该是遇到2-9的数字就全部push 相应数字 而不是先把它入队 下次碰到再入 */#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,s_x,s_y,e_x,e_y;
char map[1200][1200];
int used[1200][1200];
struct haha
{
int x;
int y;
int time;
friend bool operator<(struct haha a,struct haha b)
{
return a.time>b.time;
}
}q,temp;
struct xixi
{
int x[10000];
int y[10000];
int cnt;
}p[20];
int step[4][2]={1,0,-1,0,0,1,0,-1};
int BFS()
{
int i,j,xx,yy,x,y,cnt,count=0,ans=999999999;
priority_queue<haha>que;
while(!que.empty()) que.pop();
memset(used,0,sizeof(used));
q.x=s_x;
q.y=s_y;
q.time=0;
used[s_x][s_y]=0;
que.push(q);
while(!que.empty())
{
temp=que.top();
que.pop();
if(temp.x==e_x&&temp.y==e_y) return ans=temp.time;
for(i=0;i<4;i++)
{
xx=temp.x+step[i][0];
yy=temp.y+step[i][1];
if(xx>=0&&xx<n&&yy>=0&&yy<n&&map[xx][yy]!='1'&&!used[xx][yy])
{
if(map[xx][yy]>='2'&&map[xx][yy]<='9')
{
cnt=p[map[xx][yy]-'0'].cnt;
for(j=0;j<cnt;j++)
{
x=p[map[xx][yy]-'0'].x[j];
y=p[map[xx][yy]-'0'].y[j];
if(!used[x][y])
{
used[x][y]=1;
q.x=x;
q.y=y;
q.time=temp.time+1;
que.push(q);
}
}
}
if(!used[xx][yy])
{
used[xx][yy]=1;
q.x=xx;
q.y=yy;
q.time=temp.time+1;
que.push(q);
}
}
}
}
return ans;
}
int main()
{
int i,j,ans;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<11;i++) p[i].cnt=0;
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
for(j=0;j<n;j++)
{
if(map[i][j]=='S') {s_x=i;s_y=j;}
else if(map[i][j]=='E') {e_x=i;e_y=j;}
else if(map[i][j]<='9'&&map[i][j]>='2')
{
p[map[i][j]-'0'].x[p[map[i][j]-'0'].cnt]=i;
p[map[i][j]-'0'].y[p[map[i][j]-'0'].cnt]=j;
p[map[i][j]-'0'].cnt++;
}
}
}
ans=BFS();
if(ans==999999999) printf("Oh No!\n");
else printf("%d\n",ans);
}
return 0;
}
相关推荐
程序框架Java springmvc jsp spring hibernate
BFS-traversal-example:示例使用简单的XML文件演示有向图
使用Spark进行广度优先搜索致谢BFS算法和数据集的顺序版本摘自所著的介绍使用Spark进行无向图处理的并行广度优先搜索算法安装要求: JDK 7 , Maven , Spark 在service.properties文件中配置服务参数。 ####使用IDE...
FPGA上的BFS介绍在我们的最终项目中,有一部分算法的原理与BFS相似,因此我计划使用FPGA加速简单的BFS算法。 如果仍有空间,请使用加速的BFS算法作为模板来对我们项目的相应部分进行修改,以使用FPGA加速项目。环境g...
BPSK 解调器函数,其中 x 是 BPSK 输入,fc 是载波频率,T 是符号(比特)持续时间,nbits 是比特数,b 是输出比特流。 语法:: [b]=bfsk_demod(x,fc,T);
leetcode 176 leetcode-Weekly-competition ...无论是BFS还是DFS都要维护一个Visited[]来判断当前状态是否已经访问过了,一定是确实到达了这个点才对visited数组进行更新(对于二叉树不需要) void dfs()/
邻接表存储的图的DFS,BFS遍历。文档描述: http://blog.csdn.net/qq_16912257/article/details/45848935
BFS资源管理器 在广度优先搜索中,我的博客文章附带的代码。 虽然不是很好,但是它可以工作,并且可以演示所需的内容。
bfs-gfs-py 使用队列(内置python)和链表在图中进行广度优先和深度优先搜索的示例实现 这里没什么可看的,我这样做是出于培训目的。
杂项游戏信息 MISC#1。 如果您建立了一个航空港,则有一个自动生成的直升机可以观察道路交通情况。 它随机飞行,并且每次迭代都针对交通地图测试其坐标。 如果直升机以高于9的密度悬停在交通位置上,它将通过...
HBFS(Hellabyte 文件系统):具有虚拟化支持文件系统的超过 yottabyte 规模的马赫性能 linuxide:Linux 的集成开发环境 Hellabyte 文件系统开发的集成开发环境 qemu:QEMU 的 Hellabyte 文件系统 (HBFS) gui:...
(4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列(提示:使用一个队列实现BFS); (5)输入顶点x,查找图G:若存在含x的顶点,则删除该结点及与之相关连的边,并作DFS遍历(执行操作3);否则输出信息“无x...
广度优先搜索(BFS)算法是一种用于图和树结构中的遍历算法。它从起始节点开始,逐层地探索其相邻节点,直到达到目标节点或遍历完所有节点。BFS算法的基本思想是通过队列来维护待探索的节点,并按照节点的层级顺序...
leetcode 2 BFS-4 问题1:扫雷() 问题2蛇和梯子()
DFS_BFS UPenn 类的 DFS 和 BFS 实现在这个程序中,我创建了一个名为 AdjacencyStructure 的接口,其中包含添加、减去或更改边的各种方法。 我现在已经实现了一个 AdjacencyMatrix 类(我的主要数据结构),它是一个...
关于这是用于评估MS-BFS算法的实验框架(在VLDB 2015论文)及其相关工作。 该代码使用不同的BFS算法计算给定图中顶点的前k个紧密度中心值。 以下是编译和运行源代码的说明。建造./compile 使用GCC 4.8.2在Ubuntu ...
代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 基于BFS广度优先搜索算法代码代码 ...
BFSK调制解调的实现
第五周主要讲授了 "第3章:图的分解"的有向图强连通分量,以及“第4章:图的路径”中BFS算法。 讲授内容 1. 强连通分量(SSC-Strong Conne