优先队列+BFS
2015-10-01 20:41
190 查看
hdu 5433 Xiao Ming climbing http://acm.hdu.edu.cn/showproblem.php?pid=5433
这题就是优先队列+BFS ,,,但是一直wa 原因是在搜索时标记的位置有问题。。。。。。(以前都没有出现过这种情况)
另外就是虽然找过这点的坐标(先前到过这个点),,但是斗志值可能不一样(题目中要求只要不为0就可以,也就是说到这个点的体力消耗可能会不一样,要取最小的那个),,,,所以要用三维数组来标记。(一般的优先队列是用二维数组来标记吧)
这题就是优先队列+BFS ,,,但是一直wa 原因是在搜索时标记的位置有问题。。。。。。(以前都没有出现过这种情况)
另外就是虽然找过这点的坐标(先前到过这个点),,但是斗志值可能不一样(题目中要求只要不为0就可以,也就是说到这个点的体力消耗可能会不一样,要取最小的那个),,,,所以要用三维数组来标记。(一般的优先队列是用二维数组来标记吧)
<span style="font-family:Courier New;">#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <vector> #include <set> #include <queue> #define PI 3.1415926 #define E 1000 using namespace std; typedef long long LL; char Map[55][55]; int n,m,k,sx,sy,ex,ey; bool vis[52][52][52]; int dis[4][2] = {0,1,0,-1,1,0,-1,0}; struct Node { int x,y,k; double d; bool operator < (const Node& a)const { return d > a.d; } Node(int x_,int y_,int k_,double d_) :x(x_),y(y_),k(k_),d(d_) {} }; double BFS() { priority_queue<Node>Q; Node date(sx,sy,k,0); // vis[date.x][date.y][k] = 1; // wa Q.push(date); while(!Q.empty()) { date = Q.top(); Q.pop(); if(!vis[date.x][date.y][date.k])vis[date.x][date.y][date.k] = 1; // 这样就ACl else continue; if(date.x == ex && date.y == ey && date.k)return date.d; for(int i = 0; i < 4; i++) { int xx = date.x + dis[i][0]; int yy = date.y + dis[i][1]; int kk = date.k - 1; if(vis[xx][yy][kk] || xx < 1 || yy < 1 || xx > n || yy > m || Map[xx][yy] == '#' || kk <= 0)continue; double dd = date.d + 1.0 * abs(Map[xx][yy] - Map[date.x][date.y]) / date.k; // vis[xx][yy][kk] = 1; // 按这种方法就wa Q.push(Node(xx,yy,kk,dd)); } } return -1; } int main() { // freopen("in.txt","r",stdin); int t; scanf("%d",&t); while(t --) { memset(Map,0,sizeof(Map)); memset(vis,0,sizeof(vis)); scanf("%d%d%d",&n,&m,&k); for(int i = 1; i <= n; i++) { scanf("%s",Map[i] + 1); } scanf("%d%d%d%d",&sx,&sy,&ex,&ey); double ans = BFS(); if(ans >= 0)printf("%.2lf\n",ans); else printf("No Answer\n"); } return 0; }</span>
相关文章推荐
- LVS Nginx HAProxy 优缺点
- 建设“顺序表”算法库
- 从C++strStr到字符串匹配算法
- Insert Interval
- 为应用添加搜索功能
- iOS中消息的传递机制
- poj 1067||hdu 1527 取石子游戏(博弈论,Wythoff Game)
- linux which 查看可执行文件的位置
- 搭建FTP服务
- HTML学习记录<一>:<abbr>及<acronym>
- 赋值中的类型转换
- Windows7 平台下Python+NLTK环境搭建
- POJ 1936 All in All
- adb shell dumpsys的使用
- POJ 3130 How I Mathematician Wonder What You Are! (半平面交+多边形内核判断)
- 番茄工作法中所提到的低效现象
- 栈内存的临时性不能返回局部变量地址
- POJ1256--全排列
- Communication Patterns
- 自省随想