HDU4255【BFS】
题意:
给你一个矩阵,矩阵里是的数是这么安排的,然后给你两个数,让你求这两个数的最短距离,素数不能去;
思路:
预处理一下素数表,矩阵,然后找一下起点和终点的坐标,跑一下BFS就好了;
#include<stdio.h>
#include<queue>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std; const int INF=-0x3f3f3f3f;
const int N=2e2+10; bool isprime[40010]; void sushu()
{
memset(isprime,0,sizeof(isprime));
isprime[1]=1;
for(int i=2;i<=40000;i++)
{
if(isprime[i]) continue;
for(int j=i+i;j<=40000;j+=i)
isprime[j]=1;
}
} struct asd{
int x,y;
}; int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
int step[N][N];
int ma[N][N];
int sx,sy,ex,ey; void init()
{
int i,j,m;
i=j=0;
memset(ma,0,sizeof(ma));
m=ma[0][0]=40000;
while(m>1)
{
while(j+1<200&&ma[i][j+1]==0)
ma[i][++j]=--m;
while(i+1<200&&ma[i+1][j]==0)
ma[++i][j]=--m;
while(j-1>=0&&ma[i][j-1]==0)
ma[i][--j]=--m;
while(i-1>=0&&ma[i-1][j]==0)
ma[--i][j]=--m;
}
} void BFS()
{
asd now,ne;
queue<asd>q;
memset(step,-1,sizeof(step));
now.x=sx;
now.y=sy;
step[sx][sy]=0;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
if(now.x==ex&&now.y==ey)
{
printf("%d\n",step[ex][ey]);
return;
}
for(int i=0;i<4;i++)
{
int xx=dx[i]+now.x;
int yy=dy[i]+now.y;
if(xx<0||yy<0||xx>=200||yy>=200||step[xx][yy]!=-1||!isprime[ma[xx][yy]])
continue;
step[xx][yy]=step[now.x][now.y]+1;
ne.x=xx;
ne.y=yy;
q.push(ne);
}
}
if(step[ex][ey]==-1)
puts("impossible");
} int main()
{
int cas=1;
sushu();
init();
int x,y;
while(~scanf("%d%d",&x,&y))
{
printf("Case %d: ",cas++);
if(!isprime[x]||!isprime[y])
{
puts("impossible");
continue;
}
for(int i=0;i<200;i++)
for(int j=0;j<200;j++)
{
if(ma[i][j]==x)
{
sx=i;
sy=j;
}
if(ma[i][j]==y)
{
ex=i;
ey=j;
}
}
BFS();
}
return 0;
}
HDU4255【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 ...
随机推荐
- 网络协议分析之wireshark---抓包使用
Wireshark基本介绍和学习TCP三次握手 之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS. 这篇文章介绍另一个好用的抓包工具wireshark, 用来获取网络数据封包,包括ht ...
- service oriented architecture 构造分布式计算的应用程序的方法 面向服务的架构 分解技术
zh.wikipedia.org/wiki/面向服务的架构 [程序功能做为服务] 面向服务的体系结构(英语:service-oriented architecture)是构造分布式計算的应用程序的方法 ...
- [SCOI2009] 最长距离
题目描述 windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A不可以走到格子 ...
- java中科学计数法数字转字符串
开发过程中有可能会遇到很小的数字,在显示过程中就转换成了科学计数法,这种不利于人的观看,于是就有必要转成字符串形式的.so. 将科学计数法的数字转换成字符串: 使用的是java.math的BigDec ...
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
最近做了一个spring boot 整合 quartz 实现 动态定时任务配置,在集群环境下运行的 任务.能够对定时任务,动态的进行增删改查,界面效果图如下: 1. 在项目中引入jar 2. 将需要 ...
- [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...
- poj2513 Colored Sticks —— 字典树 + 并查集 + 欧拉回路
题目链接:http://poj.org/problem?id=2513 题解:通过这题了解了字典树.用字典树存储颜色,并给颜色编上序号.这题为典型的欧拉回路问题:将每种颜色当成一个点.首先通过并查集判 ...
- MYSQL进阶学习笔记十三:MySQL 内存优化!(视频序号:进阶_31)
知识点十四:MySQL 内存的优化(31) 一.优化MySQL SERVER 7组后台进程: masterthread:主要负责将脏缓存页刷新到数据文件,执行purge操作,触发检查点,合并插入缓冲区 ...
- CISCO-端口安全
1.MAC地址与端口绑定,当发现主机的MAC地址与交换机上指定的MAC地址不同时 ,交换机相应的端口将down掉.当给端口指定MAC地址时,端口模式必须为access或者Trunk状况. 3550-1 ...
- BZOJ-2257:瓶子和燃料(裴蜀定理)
jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy的飞船上共有 N个瓶子(1<=N<=1000) ,经过 ...