正如标题所说,我有一个无向图,其中每个节点都有一个数字数组。我如何打印从不同节点组成的阵列的一位数字构成的每个可能数字? ?
我尝试使用回溯,但是由于我是这项技术的新手,因此我很难付诸实践。
我已经从文件中读取了表示图的邻接矩阵,然后开始了我的算法。我试图用数组访问来跟踪访问的地方,但是我不知道如何编写验证函数。
#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;
}