博客
关于我
Oh, my goddess(bfs)
阅读量:625 次
发布时间:2019-03-13

本文共 2628 字,大约阅读时间需要 8 分钟。

 

Oh, my goddess

时间限制:
3000 ms  |  内存限制:65535 KB
难度:
3
 
描述

Shining Knight is the embodiment of justice and he has a very sharp sword can even cleavewall. Many bad guys are dead on his sword.

One day, two evil sorcerer cgangee and Jackchess decided to give him some colorto see. So they kidnapped Shining Knight's beloved girl--Miss Ice! They built a M x Nmaze with magic and shut her up in it.

Shining Knight arrives at the maze entrance immediately. He can reach any adjacent emptysquare of four directions -- up, down, left, and right in 1 second. Or cleave one adjacent wall in 3

seconds, namely,turn it into empty square. It's the time to save his goddess! Notice: ShiningKnight won't leave the maze before he find Miss Ice.

 
输入
The input consists of blocks of lines. There is a blank line between two blocks.
The first line of each block contains two positive integers M <= 50 and N <= 50separated by one space. In each of the next M lines there is a string of length N contentsO and #.
O represents empty squares. # means a wall.
At last, the location of Miss Ice, ( x, y ). 1 <= x <= M, 1 <= y <= N.
(Shining Knight always starts at coordinate ( 1, 1 ). Both Shining and Ice's locationguarantee not to be a wall.)
输出
The least amount of time Shining Knight takes to save hisgoddess in one line.
样例输入
3 5O##########O#O#3 4
样例输出
14
题解:坑,水,搞定#花费3,过去1,总共应该是4;
代码:
1 #include
2 #include
3 #include
4 using namespace std; 5 struct Node{ 6 int x,y,step; 7 friend bool operator < (Node a,Node b){ 8 return a.step>b.step; 9 }10 };11 char map[55][55];12 int vis[55][55];13 int disx[4]={0,0,1,-1};14 int disy[4]={1,-1,0,0};15 int M,N,ex,ey;16 void bfs(int sx,int sy){17 memset(vis,0,sizeof(vis));18 vis[sx][sy]=1;19 priority_queue
dl;20 Node a,b;21 a.x=sx;a.y=sy;a.step=0;22 dl.push(a);23 while(!dl.empty()){24 a=dl.top();25 dl.pop();26 for(int i=0;i<4;i++){27 b.x=a.x+disx[i];b.y=a.y+disy[i];28 if(b.x<1||b.y<1||b.x>M||b.y>N||vis[b.x][b.y])continue;29 if(map[b.x][b.y]=='O'){30 b.step=a.step+1;31 }32 if(map[b.x][b.y]=='#')b.step=a.step+4;33 if(b.x==ex&&b.y==ey){34 printf("%d\n",b.step);35 return;36 }37 vis[b.x][b.y]=1;38 dl.push(b);39 }40 }41 }42 int main(){43 while(~scanf("%d%d",&M,&N)){44 for(int i=1;i<=M;i++)scanf("%s",map[i]+1);45 scanf("%d%d",&ex,&ey);46 bfs(1,1);47 }48 return 0;49 }

 

转载地址:http://izeaz.baihongyu.com/

你可能感兴趣的文章
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>