【搜索+强剪枝】UVA-11882 - Biggest Number
来源:互联网 发布:c 调用json接口 编辑:程序博客网 时间:2024/05/09 01:24
处理得很巧妙的DFS+BFS……
题目
#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define FRE freopen("a.txt","r",stdin);struct node{ int x,y;}queue[1000];int n,m;int Max,flag,tatal;char map[20][20];char ans[35],stack[35];int dir[4][2]={-1,0,0,-1,0,1,1,0};bool yes(int x,int y){ return x>=0&&x<n&&y>=0&&y<m;}int bfs(int x,int y){ node t; char g[20][20]; for(int i=0;i<n;i++)strcpy(g[i],map[i]); int head,tail; head=tail=0; t.x=x,t.y=y; queue[tail++]=t; while(head<tail) { x=queue[head].x; y=queue[head++].y; for(int i=0;i<4;i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(!yes(xx,yy)||g[xx][yy]=='#')continue; g[xx][yy]='#'; t.x=xx,t.y=yy; queue[tail++]=t; } } return head;}void dfs(int x,int y,int cnt){ if(Max<cnt||(Max==cnt&&flag==1)) { stack[cnt]=0; strcpy(ans,stack); Max=cnt; flag=0; } int res=bfs(x,y); if(res+cnt-1<Max||(res+cnt-1==Max&&flag==-1))return; for(int i=0;i<4;i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(!yes(xx,yy)||map[xx][yy]=='#')continue; if(flag!=1&&ans[cnt]>map[xx][yy]&&tatal==Max)continue; stack[cnt]=map[xx][yy]; map[xx][yy]='#'; if(flag==0) { if(cnt>=Max)flag=1; else if(ans[cnt]==stack[cnt])flag=0; else if(ans[cnt]<stack[cnt])flag=1; else flag=-1; dfs(xx,yy,cnt+1); flag=0; } else dfs(xx,yy,cnt+1); map[xx][yy]=stack[cnt]; }}int main(){ //FRE; while(scanf("%d%d",&n,&m)&&n+m) { tatal=0; for(int i=0;i<n;i++) { scanf("%s",map+i); for(int j=0;j<m;j++) { if(map[i][j]!='#')tatal++; } } Max=1; memset(ans,0,sizeof(ans)); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(map[i][j]=='#')continue; if(Max==tatal&&ans[0]>map[i][j])continue; stack[0]=map[i][j]; map[i][j]='#'; if(ans[0]==stack[0])flag=0; else if(ans[0]<stack[0])flag=1; else flag=-1; dfs(i,j,1); map[i][j]=stack[0]; } } printf("%s\n",ans); } return 0;}
- 【搜索+强剪枝】UVA-11882 - Biggest Number
- UVA 11882 Biggest Number (dfs搜索+bfs 剪枝)
- UVA 11882 Biggest Number (搜索+剪枝(dfs+bfs))
- UVa 11882:Biggest Number(DFS+剪枝)
- UVA11882 Biggest Number 强剪枝
- uva 11882Biggest Number
- UVA 11882Biggest Number
- Biggest Number(刘汝佳,搜索+剪枝)
- Uva 11882 Biggest Number (IDA*)
- UVA 11882(p218)----Biggest Number
- 11882 - Biggest Number(DFS + 剪枝)
- uva Biggest Number UVA
- Biggest Number UVA
- Biggest Number UVA
- 11882 - Biggest Number
- 湖南省第六届省赛 Biggest Number (搜索)
- Uva11882 Biggest Number 【dfs回溯+bfs剪枝】【习题7-15】
- Biggest Number
- C++经典书目索引及下载
- POJ-1702
- 测试一下代码效果.
- 【读书笔记】HeadFirst设计模式——命令模式简述
- SQL语句写法总结一
- 【搜索+强剪枝】UVA-11882 - Biggest Number
- Spring -JdbcTemplate 总结
- 类似于smarty之类的模板引擎的模板引擎原型
- 字典序法生成全排列算法的证明
- Cisco Packet Tracer模拟器使用
- 基于json-lib.jar包Json实例程序
- 这两天
- 1823. Hardest Job Ever! (dijkstra)
- 算法实现将一个输入的数字颠倒(输入12345->54321)