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 ...
随机推荐
- Function 详解(一)
一直想写一系列关于javascript的东西,可惜从申请博客以来就一直抽不出时间来好好写上一番,今天终于熬到周末,是该好好整理一下,那么先从声明函数开始吧; 总所周知,在javascript中有匿名函 ...
- lightoj 1179(线段树)
传送门:Josephus Problem 题意:经典约瑟夫问题,有n个人,每次数到第k个人出列,求剩下的最后一人. 分析:用线段树模拟约瑟夫问题,记录区间的减少情况,然后根据每次数到的人在区间排第几位 ...
- Python使用heapq实现小顶堆(TopK大)、大顶堆(BtmK小)
Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) | 四号程序员 Python使用heapq实现小顶堆(TopK大).大顶堆(BtmK小) 4 Replies 需1求:给出N长 ...
- linux c socket 案源
service结束 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #inclu ...
- fs学习笔记之输出格式
接触fs那么久,有必要再记录一下. 上一篇介绍了fs拓扑描写叙述文件dot的格式,今天要介绍fs输出文件的格式. 举个样例,下面是d节点输出文件的一行记录,也就是一条流经过d的记录. textexpo ...
- C# 计算字符串/文件的哈希值(MD5、SHA)
原文 C# 计算字符串的哈希值(MD5.SHA) 已做修改 一.关于本文 本文中是一个类库,包括下面几个函数: /// 1)计算32位MD5码(大小写):Hash_MD5_32 /// 2)计算16位 ...
- hdu2151(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2151 分析: DP.思路:全盘扫描. i表示时间,l表示第几棵树,方程: step[i ...
- SE 2014年4月5日
背景需求: 缺省情况下,Level-1路由器只将去往其它区域的报文发送到最近的Level-1-2路由器. 路由渗透使Level-1-2路由器将Level-2区域的路由信息发布到Level-1区域. 4 ...
- MVC数据验证使用小结
原文:MVC数据验证使用小结 描述:MVC数据验证使用小结 内容:display,Required,stringLength,Remote,compare,RegularExpression 本人最近 ...
- hdu2412(树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2412 题意:给定一棵关系树 , 从中选择一些点 , 使这些点均不存在亲子关系 , 最多能取多少个点 , ...