HDU 4308 Saving Princess claire_
来源:互联网 发布:网页设计需要美工吗 编辑:程序博客网 时间:2024/05/22 07:55
http://acm.hdu.edu.cn/showproblem.php?pid=4308
题意:
给出一个r*c的图以及走一步所需的花费
'Y'表示起始点 'C'表示重点
'*'表示可以达到的点 '#'表示不能达到的点
'P'表示可瞬间转换的点,及若从一个'P'点进入,可由下一个'P'点开始搜索
求到达'C'点的最小花费
('P'点间转化不需要花费)
代码:
#include<iostream>#include<string>#include<queue>#include<cstdlib>#include<cstdio>#define MAX 5001using namespace std;struct P{int x,y;}p[505];struct node{int x,y,cost;};int dir[4][2]={1,0,-1,0,0,1,0,-1};char map[MAX][MAX];char vist[MAX][MAX];int r,c,cost;int s_x,s_y,e_x,e_y;int k;int BFS(){queue<node> q;node now,next;for(int i=0;i<r;i++) for(int j=0;j<c;j++) vist[i][j]=0;now.x=s_x;now.y=s_y;now.cost=0;q.push(now);vist[s_x][s_y]=true;while(!q.empty()){now=q.front();q.pop();if(now.x==e_x && now.y==e_y) return now.cost-cost;for(int i=0;i<4;i++){next.x=now.x+dir[i][0];next.y=now.y+dir[i][1];if(next.x<0 || next.x>=r || next.y<0 || next.y>=c) continue;if(vist[next.x][next.y]) continue;if(map[next.x][next.y]=='#') continue;if(map[next.x][next.y]=='*'){next.cost=now.cost+cost;q.push(next);vist[next.x][next.y]=true;}else if(map[next.x][next.y]=='P'){if(vist[next.x][next.y]) continue;for(int j=0;j<k;j++){next.x=p[j].x;next.y=p[j].y;next.cost=now.cost;q.push(next);vist[next.x][next.y]=true;}}}}return -1;}int main(){while(scanf("%d%d%d",&r,&c,&cost)!=EOF){k=0;for(int i=0;i<r;i++){cin>>map[i];for(int j=0;j<c;j++){if(map[i][j]=='Y'){s_x=i;s_y=j;}else if(map[i][j]=='C'){e_x=i;e_y=j;map[i][j]='*';}else if(map[i][j]=='P'){p[k].x=i;p[k].y=j;k++;}}}int ans=BFS();if(ans==-1) printf("Damn teoy!\n");else printf("%d\n",ans);}return 0;}
思路:
若遇到一个P点,将所有P点放入队列
- hdu 4308 Saving Princess claire_
- HDU 4308 Saving Princess claire_
- HDU 4308 - Saving Princess claire_
- HDU 4308 Saving Princess claire_
- HDU 4308 Saving Princess claire_
- hdu 4308 - Saving Princess claire_
- HDU 4308 Saving Princess claire_
- HDU 4308 Saving Princess claire_
- hdu 4308 Saving Princess claire_
- HDU/HDOJ----4308 Saving Princess claire_
- hdu 4308 Saving Princess claire_(bfs)
- 【BFS】 HDU 4308 Saving Princess claire_
- hdu 4308 Saving Princess claire_(BFS)
- hdu 4308 Saving Princess claire_ BFS
- hdu 4308 Saving Princess claire_ (多校联合1)
- hdu 4308 Saving Princess claire_(bfs,4级)
- hdu 4308 Saving Princess claire_(BFS+优先队列)
- HDOJ 4308 - Saving Princess claire_ 水BFS...
- 微信公众平台开发[8]-开发模式-高级功能-获取关注用户的信息
- 监听Activity进入后台(最小化),并根据时间判断是否超时,此解决办法可用于超时重登陆
- bean的作用域
- HDU4675【GCD of scequence】【组合数学、费马小定理、取模】
- hdu3336(KMP)
- HDU 4308 Saving Princess claire_
- 【转】当ping遭遇问号
- 字符设备驱动
- PLSQL中文显示乱码
- Mahout源码解读_ToItemPrefsMapper
- E2072 Number of elements (11) differs from declaration (15)
- CodeForces 144A Arrival of the General
- 以15分钟为间隔,查询一个时间段内的时间
- 游戏开发入门参考