[Uva 10085] The most distant state (BFS)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1026
题目大意:就是说给你一个8数码,问你能够达到的距离最远的状态是什么。
刚开始以为只要顺着一边走就行了,后来发现这样走可能最远到达的状态也能通过其他方式到达。
在这里WA了好多次。
应该把所有可能出现的情况全都枚举出来,然后判重。。
UVA也真是慢。。4s的代码跑了快4分钟。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <string>
using namespace std;
typedef unsigned long long ull; const int B = ; struct Node{
int status[][];
int h;
int x,y;
string route;
}; int T;
int dir[][] = {{,},{-,},{,},{,-}}; int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
Node s;
s.h = ;
set<int> se;
for(int i=;i<;i++){
for(int j=;j<;j++){
scanf("%d",&s.status[i][j]);
s.h = s.h*+s.status[i][j];
if( s.status[i][j] == ){
s.x = i; s.y = j;
}
}
}
se.insert(s.h);
// printf("%d\n",s.h);
s.route = "";
queue<Node> q;
q.push(s);
Node ans = s;
bool fl = true;
while(!q.empty()){
Node tn = q.front(); q.pop();
if( fl || ans.route.size()<tn.route.size()) ans = tn;
for(int i=;i<;i++){
Node t = tn;
int dx = t.x+dir[i][], dy = t.y+dir[i][];
if( dx<=&&dx>=&&dy<=&&dy>= ){
swap(t.status[tn.x][tn.y],t.status[dx][dy]);
t.x = dx; t.y = dy;
int tt = ;
for(int i=;i<;i++){
for(int j=;j<;j++){
tt = tt*B+t.status[i][j];
}
}
t.h = tt; if( i== ) t.route = tn.route+"D";
else if( i== ) t.route = tn.route+"U";
else if( i== ) t.route = tn.route+"R";
else if( i== ) t.route = tn.route+"L";
if( se.find(tt)==se.end() ){
se.insert(tt);
q.push(t);
}
}
}
}
printf("Puzzle #%d\n",t);
for(int i=;i<;i++) for(int j=;j<;j++){
printf(j==?"%d\n":"%d ",ans.status[i][j]);
}
puts(ans.route.c_str());
puts("");
}
return ;
}
[Uva 10085] The most distant state (BFS)的更多相关文章
- UVa 439骑士的移动(BFS)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 11624 Fire!(两次BFS+记录最小着火时间)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVa 816 Abbott的复仇(BFS)
寒假的第一道题目,在放假回家颓废了两天后,今天终于开始刷题了.希望以后每天也能多刷几道题. 题意:这道BFS题还是有点复杂的,给一个最多9*9的迷宫,但是每个点都有不同的方向,每次进入该点的方向不同, ...
- UVA 11624 Fire!【两点BFS】
Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and the owner of the m ...
- UVA - 1601 The Morning after Halloween (BFS/双向BFS/A*)
题目链接 挺有意思但是代码巨恶心的一道最短路搜索题. 因为图中的结点太多,应当首先考虑把隐式图转化成显式图,即对地图中可以相互连通的点之间连边,建立一个新图(由于每步不需要每个鬼都移动,所以每个点需要 ...
- UVa 1599 理想路径(反向BFS 求最短路径 )
题意: 给定一个有重边有自环的无向图,n个点(2 <= n <= 100000), m条边(1 <= m <= 200000), 每条边有一个权值, 求从第一个点到n的最少步数 ...
- UVA - 816 Abbott's Revenge(bfs)
题意:迷宫从起点走到终点,进入某点的朝向不同,可以出去的方向也不同,输出最短路. 分析:因为朝向决定接下来在该点可以往哪里走,所以每个点需要有三个信息:x,y,d(坐标和进入该点的朝向),所以将起点的 ...
- UVA 1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
https://vjudge.net/problem/UVA-1599 给一个n个点m条边(2<=n<=100000,1<=m<=200000)的无向图,每条边上都涂有一种颜色 ...
- UVA 439 Knight Moves --DFS or BFS
简单搜索,我这里用的是dfs,由于棋盘只有8x8这么大,于是想到dfs应该可以过,后来由于边界的问题,TLE了,改了边界才AC. 这道题的收获就是知道了有些时候dfs没有特定的边界的时候要自己设置一个 ...
随机推荐
- VLOOKUP 函数
如果需要在表格或区域中按行查找内容,可使用 VLOOKUP,它是一个查找和引用函数.例如,按部件号查找汽车部件的价格. =VLOOKUP(要查找的值.要在其中查找值的区域.区域中包含返回值的列号.精确 ...
- WIN7 清除任务栏图标缓存
如果任务栏上锁定程序如果换了位置,如:剪切走了.图标会变成白色图标. 解决方法: rem 关闭Windows外壳程序explorer taskkill /f /im explorer.exe rem ...
- LinearLayout属性baselineAligned的作用及baseline
相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢? Android官方文档是这么描述的:
- (转)在Winform程序中设置管理员权限及为用户组添加写入权限
本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...
- (转)ORACLE触发器详解
本文转载自:http://blog.csdn.net/indexman/article/details/8023740/ ORACLE PL/SQL编程之八: 把触发器说透 本篇主要内容如下: 8.1 ...
- sublime text 3 安装注释
sublime text 3 1.安装Sublime Text 3 下载安装:http://www.sublimetext.com/3 Package Control安装:https://subli ...
- JavaScript 设置、读取Cookie
1.设置Cookie //设置cookie function setCookie(cookieName, cookieValue, cookieExpires, cookiePath) { cooki ...
- hadoop mapred-queue-acls 配置(转)
hadoop作业提交时可以指定相应的队列,例如:-Dmapred.job.queue.name=queue2通过对mapred-queue-acls.xml和mapred-site.xml配置可以对不 ...
- sql语句(mysql)
MySQL1.数据库数据类型 int 整型 double 浮点型 如double(5,2)最多5位,其中有两位小数 char:固定长度字符串,如char(255),数据长度不足会用空格补足 varch ...
- Android酷炫实用的开源框架(UI框架) 转
Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...