杭电2612
来源:互联网 发布:python入门经典pdf下载 编辑:程序博客网 时间:2024/06/06 04:54
请注意一次把所有可到达的点所花最短时间算一遍,比每找到@再寻找快!!!
一次一次找就会超时!!!
#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;char mapp[210][210];#define inf 100000000int n,m;int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};int pos1x,pos1y,pos2x,pos2y,posdx,posdy;int visit[210][210];int dist1[210][210],dist2[210][210];struct stu{int x,y,step;};int BFS(stu stu1,int dist[][210]){int i;queue<stu>k;stu stu2;memset(visit,0,sizeof(visit)); memset(dist,0,sizeof(dist)); k.push(stu1);while(!k.empty()){stu1=k.front();k.pop();for(i=0;i<4;i++){stu2.x=stu1.x+dir[i][0];stu2.y=stu1.y+dir[i][1];stu2.step=stu1.step+11;if(stu2.x>=0&&stu2.x<n&&stu2.y>=0&&stu2.y<m&&visit[stu2.x][stu2.y]!=1&&mapp[stu2.x][stu2.y]!='#'){visit[stu2.x][stu2.y]=1;dist[stu2.x][stu2.y]=stu2.step;k.push(stu2);}}}}int main(){int i,j,sum,Min;stu stu1;while(~scanf("%d%d",&n,&m)){Min=inf;for(i=0;i<n;i++){cin>>mapp[i];}for(i=0;i<n;i++){for(j=0;j<m;j++){if(mapp[i][j]=='Y'){pos1x=i;pos1y=j;}if(mapp[i][j]=='M'){pos2x=i;pos2y=j;}}}stu1.x=pos1x;stu1.y=pos1y;stu1.step=0;BFS(stu1,dist1);//第一个人所有可到达的点所花最短时间 stu1.x=pos2x;stu1.y=pos2y;stu1.step=0;BFS(stu1,dist2);//第二个人所有可到达的点所花最短时间 for(i=0;i<n;i++){for(j=0;j<m;j++){if(mapp[i][j]=='@'){if(dist1[i][j]!=0&&dist2[i][j]!=0){Min=min(dist1[i][j]+dist2[i][j],Min); }}}}cout<<Min<<endl;}return 0;}
0 0
- 杭电2612
- 杭电2612
- 杭电
- 杭电
- 杭电
- 杭电---2612 find a way
- 杭电2612Find a way
- 【杭电】[2612]Find a way
- 杭电搜索 2612 Find a way
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- 杭电ACM1061Rightmost Digit
- 杭电2099 7.11
- 杭电ACM 1003
- 杭电 ACM 2016
- 杭电ACM1466
- 杭电ACM1003
- 杭电ACM1225
- LeetCode之7_Reverse Integer
- 文件的判断
- 文件重命名
- Muduo网络库源码分析(二) 定时器TimeQueue,Timer,TimerId
- 关于使用微信登录第三方APP的实现(Android版)
- 杭电2612
- 无参构造方法和有参构造方法的调用
- 字符串存成excel表范例
- yii2入口文件
- bzoj 4475: [Jsoi2015]子集选取
- handler实现按两次返回键退出程序
- 获取系统日期和时间
- Android Video
- TOPOGRAPHIC LASER RANGING AND SCANNING Principles and Processing学习笔记