在无向图中,每个节点都有一个数字数组,如何打印每个可能的数字?

时间:2018-07-26 12:28:27

标签: c recursive-backtracking

正如标题所说,我有一个无向图,其中每个节点都有一个数字数组。我如何打印从不同节点组成的阵列的一位数字构成的每个可能数字? ?

我尝试使用回溯,但是由于我是这项技术的新手,因此我很难付诸实践。

我已经从文件中读取了表示图的邻接矩阵,然后开始了我的算法。我试图用数组访问来跟踪访问的地方,但是我不知道如何编写验证函数。

#define n 4

typedef struct viz {
int i;
int j;
int k;
};

typedef struct adiac {
    int node;
    int arr[n];
};

void create(FILE* fin, adiac mat[n][n])
{
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        fscanf(fin, "%d", &mat[i][j].node);
        for (int k = 0; k < n; k++)
            mat[i][j].arr[k] = rand() % 10;
    }
}
}

int back(int k, int i, int x, int arr[n], adiac mat[n][n], viz visited[])
{
    if (k > 2)
    {
        for (int i = 0; i < n; i++)
            printf("%d", arr[i]); // printing array of numbers
    printf("\n");
    return 0;
}
for (int j = 0; j < n; j++)
{
    if (mat[i][j].node != 0)
    {
        arr[k] = mat[i][j].arr[k];
        // marking as visited 
        visited[x].i = i;
        visited[x].j = j;
        visited[x].k = k;
    }
    if (validate)
        back(k + 1, i + 1, x + 1, arr, mat, visited);
}

int main(void)
{
    adiac mat[n][n] = { 0 };
    FILE* fin = NULL;
    viz visited[] = { 0 };

    srand(time(NULL)); 
    fin = fopen("mat.txt", "r");
    create(fin, mat);


    _getch();
    return 1;
}

0 个答案:

没有答案