hdu Rescue (bfs)
2016-03-02 20:35
169 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1242
简单优先队列搜索,自己好久不敲,,,,,手残啊,,,,orz
代码:
优先队列搜索:
可见链接:http://blog.csdn.net/sr_19930829/article/details/42706469
运行:
96532
23569
优先级 值
9 5
8 2
6 1
2 3
1 4
简单优先队列搜索,自己好久不敲,,,,,手残啊,,,,orz
代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <iostream> #include <ctype.h> #include <iomanip> #include <queue> #include <stdlib.h> using namespace std; int N,M,ans; char mp[201][201]; int vis[201][201]; int dx[4]={0,0,-1,1}; int dy[4]={-1,1,0,0}; int sx,sy; int ex,ey; struct Node { int x,y; int step; }; bool operator<(Node a,Node b)//定义结构体类型的优先队列的优先级,从小到大 { return a.step>b.step; } void getMap(int n,int m) { for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>mp[i][j]; if(mp[i][j]=='r') { sx=i; sy=j; } if(mp[i][j]=='a') { ex=i; ey=j; } } } bool pd(int x,int y) { if(x>=0&&x<N&&y>=0&&y<M&&!vis[x][y]&&mp[x][y]!='#') return true; return false; } int bfs(int x,int y) { memset(vis,0,sizeof(vis)); priority_queue<Node>q; Node a,b; a.x=x,a.y=y,a.step=0; q.push(a); while(!q.empty()){ b=q.top(); q.pop(); for(int i=0; i<4; i++){ int px=b.x+dx[i]; int py=b.y+dy[i]; if(pd(px,py)){ vis[px][py]=1; a.x=px; a.y=py; if(mp[px][py]=='x'){ a.step=b.step+2; q.push(a); } else { a.step=b.step+1; q.push(a); if(px==ex && py==ey) return a.step; } } } } return -1; } int main() { while(cin>>N>>M){ getMap(N,M); int ans=bfs(sx,sy); if(ans==-1) printf("Poor ANGEL has to stay in the prison all his life.\n"); else printf("%d\n",ans); } }
优先队列搜索:
///优先队列是默认int从大到小priority_queue<int>q1,也可以定义为从小到大priority_queue<int,vector<int>,greater<int> >q2; 也可以自定义优先级,重载< #include <iostream> #include <functional> #include <queue> using namespace std; ///自定义优先级,两种写法,按照优先级从大到小的顺序 /* struct node { friend bool operator<(node n1,node n2) { return n1.priority<n2.priority; } int priority; int value; };*/ struct node { int priority; int value; }; bool operator<(node a,node b) { return a.priority<b.priority; } int main() { const int len=5; int i; int a[len]={3,5,9,6,2}; //优先队列中从大到小输出 priority_queue<int>q1; for(i=0;i<len;i++) q1.push(a[i]); for(int i=0;i<len;i++) { cout<<q1.top(); q1.pop(); } cout<<endl; //优先队列中从小到大输出 /** priority_queue<int,vector<int>,greater<int> >q2; for(i=0;i<len;i++) q2.push(a[i]); for(i=0;i<len;i++) { cout<<q2.top(); q2.pop(); }*/ priority_queue<int,vector<int>,greater<int> >q; for(int i=0;i<len;i++) q.push(a[i]); while(!q.empty()) { cout<<q.top(); q.pop(); } cout<<endl; //按照某个优先级输出,该代码中为priority值大的先输出 priority_queue<node>q3; node b[len]; b[0].priority=6;b[0].value=1; b[1].priority=9;b[1].value=5; b[2].priority=2;b[2].value=3; b[3].priority=8;b[3].value=2; b[4].priority=1;b[4].value=4; for(i=0;i<len;i++) q3.push(b[i]); cout<<"优先级"<<'\t'<<"值"<<endl; for(i=0;i<len;i++) { cout<<q3.top().priority<<'\t'<<q3.top().value<<endl; q3.pop(); } return 0; }
可见链接:http://blog.csdn.net/sr_19930829/article/details/42706469
运行:
96532
23569
优先级 值
9 5
8 2
6 1
2 3
1 4
相关文章推荐
- UI-进程与线程(多线程、主次线程)
- SSL certificate problem: unable to get local issuer certificate
- 【POJ2778】 DNA Sequence AC自动机+矩阵快速幂
- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- JSP中RequestDispatcher的用法
- 有关UITabbarController的一些重要属性
- PAT (Advanced Level) Practise 1007 Maximum Subsequence Sum (25)
- EasyUI自定义图标
- iOS开发实战之搜索控制器UISearchController使用
- iOS(学习) UITabBarController
- codeforces 622A Infinite Sequence
- RelativeLayout加上android:layout_alignParentBottom="true"让某一部分靠最底部
- 寻找屏幕上的点击位置--Queen核心技术分享
- question_009-JAVA之Set之HashSet???
- ZOJ 3601 Unrequited Love(模拟)
- 获取设备的唯一标识uuid
- Arduino通信协议设计
- iOS UIViewAinmation 坑
- IOS开发 多线程编程 - NSOperationQueue
- Java中break、continue、return语句的使用区别