博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Wannafly交流赛1 E 迷宫2
阅读量:4974 次
发布时间:2019-06-12

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

优先队列  bfs

#include 
using namespace std;typedef long long ll ;typedef double dl ;#define INF 0x7fconst int inf = 987654321;const int sz = 505 ;const int mod = 1e9 + 7;const int sqrtn = 300;#define f(i,l,r) for(int i=l;i<=r;++i)#define g(i,l,r) for(int i=l;i>=r;--i)#define CLR(arr,val) memset(arr,val,sizeof(arr))#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);#define pii pair
#define lowbit(x) x&(-x)#define X first#define Y second ll g[sz][sz]; int T,n,m;struct node{ int x, y; ll cost; node(int _x,int _y,ll _c):x(_x),y(_y),cost(_c){} node(){} bool operator<(const node&b)const { return cost > b.cost; }}; bool vis[sz][sz]; int dir[4][2] = { -1,0,1,0,0,-1,0,1 }; ll bfs(){ priority_queue
q ; CLR(vis,0); f(i,1,m-1) if(g[1][i]!=-1) q.push(node(1,i,g[1][i])); f(i,1,n) if(g[i][m]!=-1) q.push(node(i,m,g[i][m])); while(!q.empty()) { node x = q.top();q.pop(); if(vis[x.x][x.y])continue; vis[x.x][x.y] =1; if(x.x==n || x.y ==1) return x.cost; f(i,0,3) { int dx = x.x +dir[i][0]; int dy = x.y+ dir[i][1]; if(dx<1||dx>n||dy<1||dy>m) continue; if(g[dx][dy]==-1)continue; if(vis[dx][dy])continue; q.push(node(dx,dy,x.cost+g[dx][dy])); } } return -1; }void work(){ cin>>T>>n>>m; while(T--) { f(i,1,n)f(j,1,m)cin>>g[i][j]; f(i,1,n)f(j,1,m) if(g[i][j] ==-1) g[i][j]=0; else if( g[i][j] ==0) g[i][j]=-1; cout<
<

 

转载于:https://www.cnblogs.com/corx/p/8504694.html

你可能感兴趣的文章
discuz x2 diy 模块的样式点击不管用,模块的数据、标题都可以编辑
查看>>
基于Intel Parallel Advisor的多核程序设计方法--多核3
查看>>
解决用户登录、注册传输中账号密码的安全泄露问题
查看>>
hdu1035
查看>>
PIC16F877A PICC AD转换程序
查看>>
Testing an ASP.NET Web Service using PowerShell
查看>>
0-1背包
查看>>
使用PostSharp开始AOP
查看>>
[ASP.NET]checklistbox控件的一些小技巧
查看>>
《简明Python教程》学习笔记
查看>>
微信浏览器内建的WeixinJSBridge 实现“返回”操作
查看>>
Map集合遍历的两种方式
查看>>
详解 QT 源码之 Qt 事件机制原理
查看>>
QT入门系列(3):控制台输出QString
查看>>
Ansible常用模块
查看>>
超参数和验证集
查看>>
索引的设计和使用
查看>>
通过jquery js 实现幻灯片切换轮播效果
查看>>
Javascript基础
查看>>
C# 語法---7.接口interface
查看>>