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 ...
随机推荐
- hdu 1217 利用flord算法求 有环图 2点之间最大值
Arbitrage T ime Limit: 2000/1000 MS (Java/Other ...
- 《sql---教学反馈系统-阶段项目1》
--修改列 --把 "Address" 栏位改名为 "Addr".这可以用以下的指令达成: --ALTER table customer change Addr ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- MFC之窗体改动工具栏编程状态栏编程程序启动画面
1窗体外观的改动 (1)改动在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 改动标题:cs.style&=FWS_ADDTOTITLE; ...
- switch case语句里面不能定义对象,有语法错误,除非加一个花括号
最近发现一个问题呢 发现在switch的case里面不能去定义对象了,一定义对象就会报错了 仔细了解了一下在C或者C++中,只要是在任何一对花括号 “{ }”中定义的对象,那么该对象的作用域就局限在这 ...
- form表单中的 action=./?> 是什么意思
./代表当前目录,?代表查询字符串为空 action="" //一般可以为空的,这里的双引号都要有的,表示提单提交给自己(也就是当前页处理)action="a.php&q ...
- android-包签名
android-包签名 应用能在Android 系统上安装必须是经过有私有key的证书数据签名.Android系统通过证书确定应用的作者,和与应用建立信任关系.证书不会用于控制应用的安装.证书不需要权 ...
- unix解释器文件详解
exec执行普通文件和解释器文件的区别 2014-11-15 23:52:45 分类: LINUX exec执行普通文件和解释器文件的区别 ——lvyilong316 1. 从一个问题开始 首先要从项 ...
- 组队赛第二场:字符串哈希+DP
长春现场赛 HDU 4821 思路:这题周赛的时候没做出来,有点可惜了.要是当时记起来unsigned long long自己主动取模,然后提醒一下大帝的话,后续大帝就能过了. 唉,导致让他取了好多 ...
- c# winform 子窗体访问父窗体中的方法和变量
今天的工作中突然用到这个了,不过以前没有接触过呢!不过,在有经验的同事的帮助下,这个问题也很快解决了.具体可以分为以下几种方式: 1.在父窗体中构造子窗体对象时,将父窗体传递过去: 如:FrmSub ...