骑士之旅不正常

时间:2017-01-03 13:22:00

标签: c++

我有这个骑士的旅行问题,我必须解决。我必须输入一个NxN矩阵和骑士的坐标,其中(1,1)是左下角的元素。现在该程序正常工作,但我的问题是该任务表明可以有许多输入。这就是为什么我在主函数中添加了一个while循环(连续输入并解决它们,但是在第一次输入之后,程序不再让我在控制台中写入(就像它阻止了),我唯一能做的就是停止控制台。你能帮我解决一下我的问题吗?先谢谢。

data = tidyr::gather(data = iris, variable, value, -Species)

ggplot(data, aes(y = value, x = variable, fill = Species)) +
  geom_boxplot(position = "dodge", notch = TRUE) +
  ylab("median(x)") +
  facet_wrap(~variable, scales = "free", ncol = 2)

编辑:显然我误解了这些条件。矩阵应为2 <1。 n&lt; 10.然而,当我改变条件时,程序对于低于5的矩阵不起作用。任何想法它有什么问题?

1 个答案:

答案 0 :(得分:1)

  1. 骑士之旅是哈密顿路径问题的一个特例,一般是NP难的.Heuristic能够在线性时间内成功找到解决方案。
  2. 对于m×n板,m≤n,除非满足这三个条件中的一个或多个,否则始终可以进行封闭骑士之旅。
    • m和n都是奇数
    • m = 1,2或4
    • m = 3且n = 4,6或8。wiki
  3. 你正在使用bruit-force方法。因此它会遇到无法找到解决方案的情况。

      

    第一次输入后程序不再让我写了

    因为nextMove()在找到解决方案后继续执行。你应该放置旗帜

    if (i == n * n) 
    { 
        printBoard(n); 
        global_flag=true;
        return; 
    }
    

    并在

    中检查此标记
    if ((newX >= 0 && newX < n && newY >= 0 && newY < n) && (0 == board[newX]newY]))
    {
        nextMove(newX, newY, i + 1, n);
        if(global_flag) return;
    }
    

    在while循环中初始化global_flag=false