UVA-11882 Biggest Number (DFS+剪枝)
题目大意:给出一个方格矩阵,矩阵中有数字0~9,任选一个格子为起点,将走过的数字连起来构成一个数,找出最大的那个数,每个格子只能走一次。
题目分析:DFS。剪枝方案:在当前的处境下,找出所有还能到达的点的个数,若当前数字的长度加上个数仍小于目前最优答案的长度,则剪去;若长度相等,则将所有还能到达的数字按从大到小排序后连到当前数字上,如果还比目前最优解小,则减去。找出所有还能到达的点的过程用BFS实现。
代码如下:
# include<iostream>
# include<cstdio>
# include<queue>
# include<string>
# include<cstring>
# include<algorithm>
using namespace std;
string ans;
int r,c,vis[35][35],mark[35][35],v[1000];
char p[35][35];
int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
bool ok(int x,int y)
{
if(x>=0&&x<r&&y>=0&&y<c)
return true;
return false;
}
bool smaller(string a,string b)
{
if(a.size()<b.size())
return true;
if(a.size()==b.size()&&a<b)
return true;
return false;
}
int bfs(int x,int y)
{
queue<int>q;
memset(mark,0,sizeof(mark));
q.push(x*c+y);
mark[x][y]=1;
int res=0;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0;i<4;++i){
int nx=u/c+d[i][0],ny=(u%c)+d[i][1];
if(ok(nx,ny)&&p[nx][ny]!='#'&&!vis[nx][ny]&&!mark[nx][ny]){
mark[nx][ny]=1;
v[res++]=p[nx][ny]-'0';
q.push(nx*c+ny);
}
}
}
return res;
}
void dfs(int x,int y,string ap)
{
if(smaller(ans,ap))
ans=ap;
else{
int len=bfs(x,y);
if(ap.size()+len<ans.size())
return ;
if(ap.size()+len==ans.size()){
sort(v,v+len);
string app=ap;
for(int i=len-1;i>=0;--i)
app+=char(v[i]+'0');
if(smaller(app,ans))
return ;
}
}
for(int i=0;i<4;++i){
int nx=x+d[i][0],ny=y+d[i][1];
if(ok(nx,ny)&&p[nx][ny]!='#'&&!vis[nx][ny]){
vis[nx][ny]=1;
dfs(nx,ny,ap+p[nx][ny]);
vis[nx][ny]=0;
}
}
}
void solve()
{
for(int i=0;i<r;++i){
for(int j=0;j<c;++j){
if(p[i][j]!='#'){
memset(vis,0,sizeof(vis));
vis[i][j]=1;
string ap="";
ap+=p[i][j];
dfs(i,j,ap);
}
}
}
cout<<ans<<endl;
}
int main()
{
while(scanf("%d%d",&r,&c)&&r+c)
{
ans.clear();
for(int i=0;i<r;++i)
scanf("%s",p[i]);
solve();
}
return 0;
}
UVA-11882 Biggest Number (DFS+剪枝)的更多相关文章
- UVA - 11882 Biggest Number(dfs+bfs+强剪枝)
题目大意:给出一个方格矩阵,矩阵中有数字0~9,任选一个格子为起点,将走过的数字连起来构成一个数,找出最大的那个数,每个格子只能走一次. 题目分析:DFS.剪枝方案:在当前的处境下,找出所有还能到达的 ...
- UVA 11882 Biggest Number(搜索+剪枝)
You have a maze with obstacles and non-zero digits in it: You can start from any square, walk in the ...
- 湖南省第六届省赛题 Biggest Number (dfs+bfs,好题)
Biggest Number 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 You have a maze with obstacles and non-zero di ...
- 【UVa】11882 Biggest Number(dfs+剪枝)
题目 题目 分析 典型搜索,考虑剪枝. 统计一下联通分量. 1.本位置能够达到所有的点的数量加上本已有的点,还没有之前的结果长,直接返回. 2.当本位置能够达到所有的点的数量加上本已有的点与之 ...
- UVa 208 消防车(dfs+剪枝)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 140 Bandwidth (dfs 剪枝 映射)
题意: 给定一个n个结点的图G和一个结点的排列, 定义结点i的带宽b(i)为i和相邻结点在排列中的最远距离, 所有b(i)的最大值就是这个图的带宽, 给定G, 求让带宽最小的结点排列. 给定的图 n ...
- UVA11882-Biggest Number(DFS+最优化剪枝)
Problem UVA11882-Biggest Number Accept: 177 Submit: 3117Time Limit: 1000 mSec Memory Limit : 1 ...
- Sticks(UVA - 307)【DFS+剪枝】
Sticks(UVA - 307) 题目链接 算法 DFS+剪枝 1.这道题题意就是说原本有一些等长的木棍,后来把它们切割,切割成一个个最长为50单位长度的小木棍,现在想让你把它们组合成一个个等长的大 ...
- 湖南省第六届大学生程序设计大赛原题 F Biggest Number (UVA1182)
Biggest Number http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30851#problem/F 解题思路:DFS(检索)+BF ...
- 湖南省第6届程序大赛第6题 Biggest Number
Problem F Biggest Number You have a maze with obstacles and non-zero digits in it: You can start fro ...
随机推荐
- angular Js 回车处理
不说多的,就一个代码: <input type="search" class="am-form-field" placeholder="输入搜索 ...
- kafka生产者和消费者
在使用kafka时,有时候为验证应用程序,需要手动读取消息或者手动生成消息.这个时候可以借助kafka-console-consumer.sh和kafka-console-producer.sh 这两 ...
- linux查看内存free
free 加参数-b/k//m/g,以b.k.m.g的大小显示结果,默认以k显示 [root@oldboy ~]# free total used free shared buffers cached ...
- bzoj1654 / P2863 [USACO06JAN]牛的舞会The Cow Prom
P2863 [USACO06JAN]牛的舞会The Cow Prom 求点数$>1$的强连通分量数,裸的Tanjan模板. #include<iostream> #include&l ...
- log4j.properties配置详解与实例
log4j.properties配置详解与实例 第一步:加入log4j-1.x.x.jar到lib下. 第二步:在工程的src下下建立log4j.properties.内容如下: #OFF,syste ...
- tomcat应用org.apache.catalina.LifecycleException: Failed to stop component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]异常的根本原因
早上,有个应用又挂了,客户端打开时报404,看进程是还在的.倒回第一次异常的地方,可见catalina.out中有如下信息: 08:46:56.646 [ContainerBackgroundProc ...
- HTML 和 JavaScript 实现飘花的效果
HTML 和 JavaScript 实现飘花的效果,也不算花,就是有悬浮物飘下来,和下雪似的. 也是不需要图片和其他的 js 脚本做辅助,其实已经全写在 HTML 文件中了. <html> ...
- FSMC(STM32)
(一)FSMC:Flexible Static Memory Controller,可变(灵活)静态存储控制器 小容量产品是指闪存存储器容量在1 6K至32K 字节之间的STM32F101xx.STM ...
- Python3基础 help 查看内置函数说明
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 str *运算 重复拼接字符串
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...