Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
C++ 沃恩斯多夫&x2019;骑士的s算法&x2019;s之旅_C++_Algorithm_C++11 - Fatal编程技术网

C++ 沃恩斯多夫&x2019;骑士的s算法&x2019;s之旅

C++ 沃恩斯多夫&x2019;骑士的s算法&x2019;s之旅,c++,algorithm,c++11,C++,Algorithm,C++11,请帮我输入这个代码。我不知道它为什么不打印输出。代码基于Warnsdorff的骑士之旅算法。它说“[错误]:Id返回了1个退出状态。当我在线执行它时,它是运行时错误。请帮助优化我的代码 #include <bits/stdc++.h> #define n 8 using namespace std; static int x_move[n] = {2, 2, -1, -1, 1, 1, -2, -2}; static int y_move[n] = {1, -1, 2, -2, 2

请帮我输入这个代码。我不知道它为什么不打印输出。代码基于Warnsdorff的骑士之旅算法。它说“[错误]:Id返回了1个退出状态。当我在线执行它时,它是运行时错误。请帮助优化我的代码

#include <bits/stdc++.h>
#define n 8
using namespace std;

static int x_move[n] = {2, 2, -1, -1, 1, 1, -2, -2};
static int y_move[n] = {1, -1, 2, -2, 2, -2, 1, -1};

void print(int arr[][n]) {
    for (int i = 0 ; i < n ; ++i) {
        for (int j = 0 ; j < n ; ++j)
            cout<<arr[i][j]<<" ";
        cout<<"\n";
    }
}

bool safe(int arr[][n] , int r , int c) {
    return (r >= 0 && c >= 0 && r < n && c < n && arr[r][c] == -1);
}

bool neighbour(int r , int c , int sr , int sc) {
    for (int i = 0 ; i < n ; ++i)
        if ((r + x_move[i] == sr) && (c + x_move[i] == sc))
            return true;
    return false;
}

int depth(int arr[][n] , int r , int c) {
    int co = 0;
    for (int i = 0 ; i < n ; ++i)
        if (safe(arr , r + x_move[i] , c + y_move[i]))
            c++;
    return c;
} 

bool next_one(int arr[][n] , int *r , int *c) {
    int nr , nc; 
    int min_dep_index = -1;
    int min_dep = n + 1;
    int k;
    int s = rand() % n;
    for (int co = 0 ; co < n ; ++co) {
        int i = (s + co) % n;
        nr = *r + x_move[i];
        nc = *c + y_move[i];
        k = depth(arr , nr , nc);
        if (safe(arr , *r , *c) && k < min_dep) {
            min_dep_index = i;
            min_dep = k;
        }
    }
    if (min_dep_index == -1)
        return false;
    nr = *r + x_move[min_dep_index];
    nc = *c + y_move[min_dep_index];
    arr[nr][nc] = arr[*r][*c] + 1;
    *r = nr;
    *c = nc;
    return true;
}

bool foo(int arr[][n]) {
    for (int i = 0 ; i < n ; ++i)
        for (int j = 0 ; j < n ; ++j)
            arr[i][j] = -1;
    int r , c , sr , sc;
    sc = rand() % n;
    sr = rand() % n;
    r = sr;
    c = sc;
    arr[r][c] = 1;
    for (int i = 0 ; i < n*n ; ++i) {
        if (next_one(arr , &r , &c) == false)
            return false;
    }
    if (!neighbour(r , c , sr , sc))
        return false;
    print(arr);
    return true;
}

int main() {
    int arr[n][n];
    srand(time(nullptr));
    while (foo(arr) == false) {
    ;
    }
    return 0;
}
#包括
#定义n8
使用名称空间std;
静态int x_move[n]={2,2,-1,-1,1,1,-2,-2};
静态整数y_move[n]={1,-1,2,-2,2,-2,1,-1};
无效打印(整数arr[][n]){
对于(int i=0;icout@beaker你不可能在没有链接的程序上使用调试器。@user58697你完全正确。我的错。让我们说我很高兴今天是星期五。@biker你不可能在没有链接的程序上使用调试器。@user58697你完全正确。我的错。让我们说我很高兴今天是星期五。:)