hdu 2822 Dogs

来源:互联网 发布:淘宝如何指纹支付 编辑:程序博客网 时间:2024/05/16 04:26

http://acm.hdu.edu.cn/showproblem.php?pid=2822

分析:遇到'.'(挖隧道)的时候才需要步数加1,'X'是一个整体,利用优先队列选择步数最小的开始广搜

不过这样效率比较低,可以用双搜加快效率

#include<iostream>#include<cstdio>#include<queue>using namespace std;const int NM=1005;int a[4][2]={-1,0,1,0,0,1,0,-1};int vis[NM][NM],n,m,x1,y1,x2,y2;char str[NM][NM];struct Dog{int x,y,ans;};bool operator < (struct Dog A,struct Dog B){if(A.ans>B.ans) return 1;else return 0;}void BFS(){priority_queue<Dog>pq1;Dog t,p;int i,j;for(i=0;i<n;i++)for(j=0;j<m;j++)vis[i][j]=0;t.x=x1,t.y=y1;t.ans=0;vis[t.x][t.y]=1;pq1.push(t);while(!pq1.empty()){t=pq1.top();pq1.pop();if(t.x==x2&&t.y==y2){printf("%d\n",t.ans);return;}for(i=0;i<4;i++){p.x=t.x+a[i][0],p.y=t.y+a[i][1];p.ans=t.ans;if(p.x>=0&&p.x<n&&p.y>=0&&p.y<m&&!vis[p.x][p.y]){if(str[p.x][p.y]=='.')p.ans++;vis[p.x][p.y]=1;pq1.push(p);}}}}int main(){int i;while(scanf("%d%d",&n,&m)&&(n||m)){for(i=0;i<n;i++)scanf("%s",str[i]);scanf("%d%d",&x1,&y1);scanf("%d%d",&x2,&y2);x1-=1,y1-=1;x2-=1,y2-=1;BFS();}return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三岁宝宝说话少怎么办 快4岁不会说话怎么办 宝宝2岁半不爱说话怎么办 两岁半宝宝注意力不集中怎么办 中国出生的外籍小孩怎么办签证 中国人入外籍后国内财产怎么办 中国人入外籍后国内资产怎么办 小孩去美国上小学怎么办 咳嗽震的胸口疼怎么办 高中孩子对手机着迷怎么办 小孩不肯读书沉迷游戏怎么办 小孩沉迷吃鸡游戏怎么办 高一数学成绩差怎么办 小孩子学数学用手指算怎么办 孩子d和b分不清怎么办 和家人走散后怎么办幼儿教案 小孩胃口不好不爱吃饭怎么办 幼儿园孩子学习记不住怎么办 幼儿园小孩数字记不住怎么办 大班教案走丢了怎么办 ppt加视频反了怎么办 拔罐之后背疼怎么办 拔完火罐后背疼怎么办 打印机红色的口堵了怎么办 打印机红色复印不出来怎么办 打印机加错颜色墨水怎么办 中班安全教案脚扭伤了怎么办 中班脚扭伤了怎么办教案 中班安全脚扭伤了怎么办 中班安全脚扭伤了怎么办反思 走丢了怎么办教案反思 汽车后轱辘不转怎么办 走丢了怎么办社会教案 小老鼠搬鸡蛋鸡蛋太大怎么办 小班走丢了怎么办教案 小班走丢了怎么办反思 房屋外墙漏水物业不管怎么办 厨房墙砖用色花怎么办 小孩子做错事很偏激怎么办 孩子在学校偷钱怎么办 房间墙壁上到处有湿虫怎么办