Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 看似棘手的组合问题-在地图中找到旋转操作集_Algorithm_Graph_Path Finding - Fatal编程技术网

Algorithm 看似棘手的组合问题-在地图中找到旋转操作集

Algorithm 看似棘手的组合问题-在地图中找到旋转操作集,algorithm,graph,path-finding,Algorithm,Graph,Path Finding,我刚刚发现了一个让我疑惑的谜题。提示: 给出一个图 m >代码>由 n*n >瓦片(n可以大到1000),考虑一个操作 r>代码>,使得 r{x,y,t}从m中旋转一个瓦片,在坐标 [x,y] , t< /代码>次- 90度顺时针旋转。 计算一组R操作,这些操作生成一个不包含循环和悬空分幅的贴图(对于每个分幅,它至少链接到一条边上的相邻分幅) 例如: 输入: 可以重新排列为: ┏━╸┏╸╻┏╸ ┣╸╺╋┳┛┃╻ ┗┓┏┛┃╻┃┃ ╻┣┫╻╹┃┣┛ ┃╹┣┫╻┣┻╸ ┗┓┃┗┻┫╻╻ ┏┫┣┓┏╋

我刚刚发现了一个让我疑惑的谜题。提示:

给出一个图<代码> m >代码>由<代码> n*n >瓦片(n可以大到1000),考虑一个操作<代码> r>代码>,使得<代码> r{x,y,t}从m中旋转一个瓦片,在坐标<代码> [x,y] ,<代码> t< /代码>次- 90度顺时针旋转。

计算一组
R
操作,这些操作生成一个不包含循环和悬空分幅的贴图(对于每个分幅,它至少链接到一条边上的相邻分幅)

例如: 输入:

可以重新排列为:

┏━╸┏╸╻┏╸
┣╸╺╋┳┛┃╻
┗┓┏┛┃╻┃┃
╻┣┫╻╹┃┣┛
┃╹┣┫╻┣┻╸
┗┓┃┗┻┫╻╻
┏┫┣┓┏╋┛┃
╹┗┛╹╹┗━┛
这是一个修改后的地图,不包含循环或悬挂的碎片

一组可能的磁贴包括:

"╸" and rotations: "╺", "╻", "╹"

"━" and rotation: "┃"

"┓" and rotations: "┛", "┏", "┗"

"┣" and rotations: "┳", "┻", "┫"

"╋" 
当然,蛮力解决方案(旋转每个零件,检查正确性)是不可行的,因为地图可能很大

我能想到的每一个解决方案(带生成树的图,DP,甚至是一个遗传算法,递归回溯-我们甚至可以删减任何东西吗?)都和蛮力方案一样低效。如果集合是唯一的,这会改变什么吗


最棒的是,“无悬挂瓷砖”大大减少了搜索空间。所以,即使是蛮力方法也应该很早就消除很多情况。“旋转瓷砖t次”是什么意思?也许将瓷砖顺时针旋转t倍90度?晃来晃去怎么样?也许像每一块黑色瓷砖的边缘都与相邻瓷砖的黑色边缘相接触?这是某个物理系统的表示,还是仅仅是一个抽象的想法?嘿@ravenspoint,我将编辑以添加您的建议。这是一个抽象的想法。一个尝试就是解决SAT问题。如果我正确地解释了这个任务,那么通过对每个tiles 4-邻域进行一些预处理,整个无环问题可以着色,如所述:
tile x,y,o->neighbor-tile-config_0 | | neighbor-tile-config_1,
其中neighbor-tile-config是另一个(先验推断的邻域)其选定方向使每个磁贴的
磁贴x,y,o
非悬挂+
恰好为一(磁贴x,y,{o})
。无环性更难(参见
SAT模图:无环性(Gebser et al.
)。它可能适用于
N=1000
。它将(imho)击败暴力。
"╸" and rotations: "╺", "╻", "╹"

"━" and rotation: "┃"

"┓" and rotations: "┛", "┏", "┗"

"┣" and rotations: "┳", "┻", "┫"

"╋"