hdu 4308 Saving Princess claire_ BFS
为了准备算法考试刷的,想明确一点即可,全部的传送门相当于一个点,当遇到一个传送门的时候,把全部的传送门都压入队列进行搜索
贴代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std; const int MAXN = 5000+50;
int r,c,f,si,sj,ei,ej,ans;
int mat[MAXN][MAXN]; struct Node
{
Node(int i=0,int j=0,int v=0){x=i;y=j;val=v;}
int x,y;
int val;
}; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//left up down right void init()
{
char cc;
ans=-1;
getchar();
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cc=getchar(); //putchar(cc);
if(cc == 'Y'){mat[i][j]=2;si=i,sj=j;continue;}
if(cc == 'C'){mat[i][j]=3;ei=i;ej=j;continue;}
if(cc == '*'){mat[i][j]=0;continue;}
if(cc == '#'){mat[i][j]=-1;continue;}
if(cc == 'P'){mat[i][j]=1;continue;}
}
getchar();
}
} int legal(Node &s)
{
if(s.x>=0 && s.y>=0 && s.x<r && s.y <c)
return 1;
return 0;
} int bfs()
{
queue<Node>q;
Node st(si,sj),e;
q.push(st);
mat[si][sj]=-2;
while(!q.empty())
{
st=q.front();
//if(mat[st.x][st.y]==3)return st.val; chao sha bi
if(st.x==ei && st.y == ej)return st.val;
q.pop();
for(int k=0;k<4;k++)
{
e.x=st.x+dir[k][0];
e.y=st.y+dir[k][1];
e.val=st.val;
if(legal(e) && mat[e.x][e.y]>=0 && mat[e.x][e.y]!=2)
{
if(!mat[e.x][e.y])//*
{
e.val=st.val+f;
q.push(e);
}
if(mat[e.x][e.y]==1)
{
for(int ii=0;ii<r;ii++)
{
for(int jj=0;jj<c;jj++)
{
if(mat[ii][jj]==1)
{
mat[ii][jj]=-2;
q.push(Node(ii,jj,e.val));
} }
}
}
if(mat[e.x][e.y]>1)q.push(e);
mat[e.x][e.y]=-2;
}
} }
return -1;
}
int main()
{
//freopen("hdu4038.txt","r",stdin);
while(scanf("%d%d%d",&r,&c,&f)!=EOF)
{
init();
ans=bfs();
if(ans == -1)printf("Damn teoy!\n");
else
printf("%d\n",ans);
}
return 0;
}
hdu 4308 Saving Princess claire_ BFS的更多相关文章
- hdu 4308 Saving Princess claire_
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4308 Saving Princess claire_ Description Princess cla ...
- HDU 4308 Saving Princess claire_(简单BFS)
求出不使用P点时起点到终点的最短距离,求出起点到所有P点的最短距离,求出终点到所有P点的最短距离. 答案=min( 不使用P点时起点到终点的最短距离, 起点到P的最短距离+终点到P的最短距离 ) #i ...
- BFS(最短路) HDOJ 4308 Saving Princess claire_
题目传送门 题意:一个(r*c<=5000)的迷宫,起点'Y‘,终点'C',陷阱‘#’,可行路‘*’(每走一个,*cost),传送门P,问Y到C的最短路 分析:一道最短路问题,加了传送门的功能, ...
- HDU 4308 BFS Saving Princess claire_
原题直通车:HDU 4308 Saving Princess claire_ 分析: 两次BFS分别找出‘Y’.‘C’到达最近的‘P’的最小消耗.再算出‘Y’到‘C’的最小消耗,比较出最小值 代码: ...
- Saving Princess claire_(hdu 4308 bfs模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=4308 Saving Princess claire_ Time Limit: 2000/1000 MS (Jav ...
- 2012 #1 Saving Princess claire_
Saving Princess claire_ Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & % ...
- hdu----(4308)Saving Princess claire_(搜索)
Saving Princess claire_ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- HDU 5025 Saving Tang Monk --BFS
题意:给一个地图,孙悟空(K)救唐僧(T),地图中'S'表示蛇,第一次到这要杀死蛇(蛇最多5条),多花费一分钟,'1'~'m'表示m个钥匙(m<=9),孙悟空要依次拿到这m个钥匙,然后才能去救唐 ...
- ZOJ 3369 Saving Princess
Saving Princess Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...
随机推荐
- DelphiXE7中创建WebService(服务端+客户端) good
相关资料:http://www.2ccc.com/news/Html/?1507.html DelphiXE7新建WebService具体操作:1.打开“DelphiXE7”->“File”-& ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Dvtm -- 平铺式终端
Dvtm -- 平铺式终端_Linux伊甸园开源社区-24小时滚动更新开源资讯,全年无休! Dvtm -- 平铺式终端 关注我们: 如果你使用过 Dwn 或 Awesome 这种平铺式窗口管理器,一定 ...
- The usage of V$PGA_TARGET_ADVICE
Oracle 10g 给出了一系列的自动优化的建议,告诉我们PGA分配多大能给系统带来最大的性能?V$PGA_TARGET_ADVICE视图给出了很好的“预测”! 看一下这个视图能给我们带来什么样的信 ...
- Java并发编程--Fork/Join框架使用
上篇博客我们介绍了通过CyclicBarrier使线程同步,可是上述方法存在一个问题,那就是假设一个大任务跑了2个线程去完毕.假设线程2耗时比线程1多2倍.线程1完毕后必须等待线程2完毕.等待的过程线 ...
- Easyui 让Window弹出居中
原文:Easyui 让Window弹出居中 easyui1.3.2版本,window的弹出不会居中了.而dialog是会居中的,我们必须为为window的open事件做扩展 代码如下:只要加入以下代码 ...
- 动态拼接lambda表达式树
前言 最近在优化同事写的代码(我们的框架用的是dapperLambda),其中有一个这样很普通的场景——界面上提供了一些查询条件框供用户来进行过滤数据.由于dapperLambda按条件查询时是传入表 ...
- android编译自己 内置的jar做法
1.首先 android.mk LOCAL_PATH := $(call my-dir) # ===================================================== ...
- 手机装linux系统
第一步: 首先 , 你的手机需要获取root权限. 如果不知道如何获取, 可以到电脑上搜索一下安卓手机root教程. 不同品牌的手机root的方法不同. 也可以到机锋论坛上寻找root的具体方法. 第 ...
- RabbitMQ消息队列应用
RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...