【BFS】wikioi 2074 营救
来源:互联网 发布:国内top社交软件 编辑:程序博客网 时间:2024/04/28 11:43
题目链接:http://wikioi.com/problem/2074/
分析:
比较典型的宽搜。
开队列记录状态,另外开数组记录力气和步数,每扩展到一个点,先判断是否越界,再判断搜到的值是否小于当前最优值,如果符合要求,入队。
注意结构体中的变量不要开得太多,否则会超时。
代码:
#include<iostream>#include<cstdio>#include<cmath>#include<ctime>#include<queue>#define nn 501using namespace std;queue <int> qx,qy;int dx[8]={0,1,1,-1,0,1,-1,-1}, dy[8]={1,0,1,0,-1,-1,-1,1}; //8个方向int a[nn][nn],b[nn][nn],b1[nn][nn]={0},n,m,x,y,x1,x2,y11,y2;int main(){ freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);cin>>n>>m;cin>>x1>>y11>>x2>>y2;for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { char ch; cin>>ch; a[i][j]=ch-'0'; b[i][j]=10000000; } int he,ta;he=1;ta=1;qx.push(x1),qy.push(y11),b1[x1][y11]=1,b[x1][y11]=0; while (!qx.empty()) { x=qx.front();y=qy.front(); for (int i=0;i<8;i++) { int xx=x+dx[i]; int yy=y+dy[i]; if (xx>0&&xx<=n&&yy>0&&yy<=m) if (a[xx][yy]!=0) if (b[x][y]+abs(a[xx][yy]-a[x][y])<b[xx][yy]|| //判断是否可行 (b[x][y]+abs(a[xx][yy]-a[x][y])==b[xx][yy]&&b1[x][y]+1<b1[xx][yy])) { qx.push(xx); qy.push(yy); b[xx][yy]=b[x][y]+abs(a[xx][yy]-a[x][y]); b1[xx][yy]=b1[x][y]+1;} } qx.pop();qy.pop(); } if (b[x2][y2]==10000000) cout<<"0 0"; //无解的情况 elsecout<<b1[x2][y2]<<" "<<b[x2][y2];}
- 【BFS】wikioi 2074 营救
- 营救天使(bfs)
- 实现BFS之“营救”
- 实现BFS之“营救”
- ZOJ1649 营救Rescue (BFS)
- 2074 营救
- BFS台州1335营救天使
- 营救
- 营救
- 营救
- HDU 1242 Rescue(营救)(优先队列+BFS)
- HDOJ-1242-RESCURE(营救公主)【BFS+优先队列】
- hrbust 哈理工oj 1989 营救小组【BFS】
- 最小生成树 || ( BFS && 二分答案) —— 营救
- 【网络流24题】孤岛营救问题(分层图+BFS)
- wikioi-天梯-普及一等-bfs-1004:四子连棋
- wikioi-天梯-普及一等-bfs-1026:逃跑的拉尔夫
- 营救皮卡丘
- Newtonsoft.Json解析json数据
- { }soj1141
- 新手学Python 第六篇(Python的对象)
- git remote命令查看远程仓库信息时,出现new ( next fetch will store in remotes/origin)提示
- PHP 找不到相应的头文件在扩展开发编译时
- 【BFS】wikioi 2074 营救
- VC 的Attach功能
- @标志符的一些应用
- java中"Robot "
- DAO设计模式
- Malloc内存泄露和内存越界问题的研究
- OpenCart布局(Layout)系统是如何工作的?
- linux命令详解:http://wiki.linux-ren.org/index.php/
- Leetcode:Longest Valid Parentheses