题目链接:https://cn.vjudge.net/problem/UVA-10798

#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
using namespace std;#define debug puts("YES");
#define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++)
#define read(x,y) scanf("%d%d",&x,&y)#define lrt int l,int r,int rt
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define ll long long
const int  maxn =25;
const int mod=1e9+7;
ll powmod(ll x,ll y) {ll t;for(t=1;y;y>>=1,x=x*x%mod) if(y&1) t=t*x%mod;return t;}
ll gcd(ll x,ll y)  {  return y==0?x:gcd(y,x%y); }
///head
/*
题目大意:这道题目意思很关键,
就是说路径必须是要唯一的,
我开始时读的以为是每个方向最小值取最大即可,
其实并不是。。。找一条唯一的路径,使得不论哪个方向踩的花数的最大值最小,
首先肯定用优先队列来看扩展节点,从权重最小的开始能保证找到最优解,
其次就是状态的问题了,由于几何对称性,
可以用状态数组唯一的标识,一条路径在所有方向产生的权重,
(注意,最多也就是边长,数组范围没有越界)。
这样一分析,问题就变成了普通的最短路BFS了。*/
struct node
{int x,y;int l,r,u,d;int w;node(int tx=0,int ty=0,int tl=0,int tu=0,int tr=0,int td=0){x=tx,y=ty;l=tl,r=tr,u=tu,d=td;w=max(max(l,r),max(u,d));}bool operator<(const node & y) const{return w>y.w;///最小堆}
};int n;
int vis[maxn][maxn][maxn][maxn][maxn][maxn];
int mp[maxn][maxn];
char s[maxn];int d1[]={0,0,1,-1};
int d2[]={1,-1,0,0};int bfs(int x)
{memset(vis,0,sizeof(vis));priority_queue<node> pq;pq.push(node(x,x,0,0,0,0));vis[x][x][0][0][0][0]=1;while(!pq.empty()){node tp=pq.top();pq.pop();for(int i=0;i<4;i++){node s=tp;int tx=s.x+d1[i];int ty=s.y+d2[i];if(tx<=0||tx>n||ty<=0||ty>n) return tp.w;s.x=tx;s.y=ty;if(mp[tx][ty]) s.l++;if(mp[ty][n-tx+1]) s.u++;if(mp[n-tx+1][n-ty+1]) s.r++;if(mp[n-ty+1][tx]) s.d++;if(vis[tx][ty][s.l][s.u][s.r][s.d]) continue;vis[tx][ty][s.l][s.u][s.r][s.d]=1;pq.push(node(s.x,s.y,s.l,s.u,s.r,s.d));}}return -1;
}int main()
{while(scanf("%d",&n)&&n){for(int i=1;i<=n;i++){scanf("%s",s+1);for(int j=1;j<=n;j++)if(s[j]=='R') mp[i][j]=1;else mp[i][j]=0;}printf("At most %d rose(s) trampled.\n", bfs(n/2+1));}return 0;
}

UVA 10798 Be wary of Roses (BFS+几何状态对称)*相关推荐

  1. UVA 10798 - Be wary of Roses(记忆化BFS)

    UVA 10798 - Be wary of Roses 题目链接 题意:给定一个地图,人一开始在中心,问选择一种走法走出去,使得面朝任何一个方向走,踩到的花的最大值最小 思路:用优先队列进行BFS, ...

  2. uva 10798 - Be wary of Roses(最短路)

    题目链接:uva 10798 - Be wary of Roses 代码 #include <cstdio> #include <cstring> #include <q ...

  3. UVA 10798 - Be wary of Roses (bfs+hash)

    参考http://blog.csdn.net/tobewhatyouwanttobe/article/details/17403987和http://blog.csdn.net/accelerator ...

  4. LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)

    1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...

  5. 【Uva - 10047 】The Monocycle(搜索,bfs记录状态)

    题干: Uva的题目就不粘贴题干了,,直接上题意吧. 有你一个独轮车,车轮有5种颜色,为了5中颜色的相对位置是确定的.有两种操作:1.滚动:轮子必须沿着顺时针方向滚动,每滚动一次会到达另一个格子,着地 ...

  6. UVA - 1533Moving Pegs移动小球 (bfs加状态压缩)

    题意:一共有15个洞,成三角形分布,有一个洞是空的,其余都是有一个小球,小球可以穿过一个或多个小球到空洞里,被穿过的小球就被拿走(注意,穿过的小球必须至少一个),最后只剩一个小球,且在开始时候的空位上 ...

  7. UVA 12101 Prime Path (素数筛+BFS)

    题意:给一个四位数的素数,求通过几步变换(一次只能换一个位置的数,且变换过程中只能出现素数)变为目标四位数 分析:素数筛法+BFS,BFS时更换一个数字如果符合条件就加入队列 代码: #include ...

  8. uva 10335 - Ray Inside a Polygon(几何)

    题目链接:uva 10335 - Ray Inside a Polygon 恶心题,注意精度和输出等问题,代码中有标识,后面有一些数据. #include <cstdio> #includ ...

  9. UVA - 11624  Fire! 两次BFS

    UVA - 11624  Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and ...

最新文章

  1. java 实现接口后重写方法报错
  2. Delphi中的Type
  3. MySQL高级 - 案例 - AOP记录日志
  4. webpack VS Node.js - 二者对 require 功能的实现区别
  5. 基于matlab的能级_波函数及几率密度图形的绘制,基于MATLAB的能级波函数及几率密度图形的绘制.pdf...
  6. 如何启动和关闭oracle数据库,Oracle数据库启动和关闭方式总结
  7. OpenCV-数字图像处理之拉普拉斯算子
  8. cass读取dat文件_南方CASS教程+视频讲解+插件汇总,小白快速上手的测绘神器
  9. php+ajax+js注册源码,将Ajax封装至js文件中(用户注册源码实例)
  10. 数据挖掘的办法有哪些
  11. 重启网络显示:Device eth0 does not seem to be present,delaying initialization.
  12. 对企业来说,网络营销渠道与传统营销的渠道有何不同?
  13. android+祖玛游戏源码,祖玛游戏源代码
  14. Gmail Driver:你的gmail成了你的硬盘。
  15. 关于angular模态框遇到的坑 Error: [$injector:unpr] Unknown provider
  16. python的运行过程_python执行流程
  17. 【Python】照片扩展信息提取
  18. 集成微透镜阵列的CMOS传感器分析
  19. 每日分享html之1个卡片选择、2个加载、1个背景、1个开关
  20. Digilent Xilinx USB Jtag cable

热门文章

  1. Debug [Error] too many initializers for ‘<anonymous struct>‘
  2. shaddock发展计划
  3. [C语言]字符串除首、尾字符外,将其余字符按ASCII码降序排列
  4. Eigen教程:1 Eigen简介和矩阵常见操作
  5. java抓取的代理服务ip端口
  6. 新手python的自学总结(已拿到百度offer)
  7. 实证研究的步骤_毕业论文怎么写?写作步骤是什么?方式可分为理论研究型、应用研究型和实证型三大类。理论研究型根据对现有理论的反思、研究【山西师范大学现代文理学院招生咨询吧】...
  8. 百花齐放的国产数据库,献礼国庆节
  9. 教你两式妙招杀死“顽固不化”的病毒进程
  10. Burp Suite 渗透测试利器(FireFox插件)