UVA 10798 Be wary of Roses (BFS+几何状态对称)*
题目链接: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+几何状态对称)*相关推荐
- UVA 10798 - Be wary of Roses(记忆化BFS)
UVA 10798 - Be wary of Roses 题目链接 题意:给定一个地图,人一开始在中心,问选择一种走法走出去,使得面朝任何一个方向走,踩到的花的最大值最小 思路:用优先队列进行BFS, ...
- uva 10798 - Be wary of Roses(最短路)
题目链接:uva 10798 - Be wary of Roses 代码 #include <cstdio> #include <cstring> #include <q ...
- UVA 10798 - Be wary of Roses (bfs+hash)
参考http://blog.csdn.net/tobewhatyouwanttobe/article/details/17403987和http://blog.csdn.net/accelerator ...
- LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)
1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...
- 【Uva - 10047 】The Monocycle(搜索,bfs记录状态)
题干: Uva的题目就不粘贴题干了,,直接上题意吧. 有你一个独轮车,车轮有5种颜色,为了5中颜色的相对位置是确定的.有两种操作:1.滚动:轮子必须沿着顺时针方向滚动,每滚动一次会到达另一个格子,着地 ...
- UVA - 1533Moving Pegs移动小球 (bfs加状态压缩)
题意:一共有15个洞,成三角形分布,有一个洞是空的,其余都是有一个小球,小球可以穿过一个或多个小球到空洞里,被穿过的小球就被拿走(注意,穿过的小球必须至少一个),最后只剩一个小球,且在开始时候的空位上 ...
- UVA 12101 Prime Path (素数筛+BFS)
题意:给一个四位数的素数,求通过几步变换(一次只能换一个位置的数,且变换过程中只能出现素数)变为目标四位数 分析:素数筛法+BFS,BFS时更换一个数字如果符合条件就加入队列 代码: #include ...
- uva 10335 - Ray Inside a Polygon(几何)
题目链接:uva 10335 - Ray Inside a Polygon 恶心题,注意精度和输出等问题,代码中有标识,后面有一些数据. #include <cstdio> #includ ...
- UVA - 11624 Fire! 两次BFS
UVA - 11624 Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and ...
最新文章
- java 实现接口后重写方法报错
- Delphi中的Type
- MySQL高级 - 案例 - AOP记录日志
- webpack VS Node.js - 二者对 require 功能的实现区别
- 基于matlab的能级_波函数及几率密度图形的绘制,基于MATLAB的能级波函数及几率密度图形的绘制.pdf...
- 如何启动和关闭oracle数据库,Oracle数据库启动和关闭方式总结
- OpenCV-数字图像处理之拉普拉斯算子
- cass读取dat文件_南方CASS教程+视频讲解+插件汇总,小白快速上手的测绘神器
- php+ajax+js注册源码,将Ajax封装至js文件中(用户注册源码实例)
- 数据挖掘的办法有哪些
- 重启网络显示:Device eth0 does not seem to be present,delaying initialization.
- 对企业来说,网络营销渠道与传统营销的渠道有何不同?
- android+祖玛游戏源码,祖玛游戏源代码
- Gmail Driver:你的gmail成了你的硬盘。
- 关于angular模态框遇到的坑 Error: [$injector:unpr] Unknown provider
- python的运行过程_python执行流程
- 【Python】照片扩展信息提取
- 集成微透镜阵列的CMOS传感器分析
- 每日分享html之1个卡片选择、2个加载、1个背景、1个开关
- Digilent Xilinx USB Jtag cable
热门文章
- Debug [Error] too many initializers for ‘<anonymous struct>‘
- shaddock发展计划
- [C语言]字符串除首、尾字符外,将其余字符按ASCII码降序排列
- Eigen教程:1 Eigen简介和矩阵常见操作
- java抓取的代理服务ip端口
- 新手python的自学总结(已拿到百度offer)
- 实证研究的步骤_毕业论文怎么写?写作步骤是什么?方式可分为理论研究型、应用研究型和实证型三大类。理论研究型根据对现有理论的反思、研究【山西师范大学现代文理学院招生咨询吧】...
- 百花齐放的国产数据库,献礼国庆节
- 教你两式妙招杀死“顽固不化”的病毒进程
- Burp Suite 渗透测试利器(FireFox插件)