'new' 未声明(首次在此函数中使用)

nan*_*.kl 0 c

此代码用于哈密顿循环我无法解决此错误:

    In function ‘hamCycle’:
   error: ‘new’ undeclared (first use in this function)
         int *path = new int [V];
                     ^
 note: each undeclared identifier is reported only once for each function it appears in
 error: expected ‘,’ or ‘;’ before ‘int’
         int *path = new int [V];
                         ^
Run Code Online (Sandbox Code Playgroud)

哈密​​顿循环代码是:

/*
 * C Program to Find Hamiltonian Cycle
 */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define V 5

void printSolution(int path[]);

/* 
 * check if the vertex v can be added at index 'pos' in the Hamiltonian Cycle 
 */
bool isSafe(int v, bool graph[V][V], int path[], int pos)
{
    if (graph [path[pos-1]][v] == 0)
        return false;
   for (int i = 0; i < pos; i++)
        if (path[i] == v)
            return false;
    return true;
}

/* solve hamiltonian cycle problem */
bool hamCycleUtil(bool graph[V][V], int path[], int pos)
{
    if (pos == V)
    {
        if (graph[ path[pos-1] ][ path[0] ] == 1)
            return true;
        else
            return false;
    }

    for (int v = 1; v < V; v++)
    {
        if (isSafe(v, graph, path, pos))
        {
            path[pos] = v;
            if (hamCycleUtil (graph, path, pos+1) == true)
                return true;
            path[pos] = -1;
        }
    }
    return false;
}

/* solves the Hamiltonian Cycle problem using Backtracking.*/
bool hamCycle(bool graph[V][V])
{
    int *path = new int [V];
    for (int i = 0; i < V; i++)
        path[i] = -1;
    path[0] = 0;
    if (hamCycleUtil(graph, path, 1) == false)
    {
      printf("\nSolution does not exist");
        return false;
    }
    printSolution(path);
    return true;
}

/* Main */
void printSolution(int path[])
{
    printf("Solution Exists:");
    printf(" Following is one Hamiltonian Cycle \n");
    for (int i = 0; i < V; i++)
        printf(" %d",path[i]);
    printf(" %d",path[0]);
}

int main()
{
   /* Let us create the following graph
      (0)--(1)--(2)
       |   / \   |
       |  /   \  |
       | /     \ |
      (3)-------(4)    */
   bool graph1[V][V] = {{0, 1, 0, 1, 0},
                      {1, 0, 1, 1, 1},
                      {0, 1, 0, 0, 1},
                      {1, 1, 0, 0, 1},
                      {0, 1, 1, 1, 0},
                     };
   hamCycle(graph1);

   /* Let us create the following graph
      (0)--(1)--(2)
       |   / \   |
       |  /   \  |
       | /     \ |
      (3)       (4)    */
    bool graph2[V][V] = {{0, 1, 0, 1, 0},
                      {1, 0, 1, 1, 1},
                      {0, 1, 0, 0, 1},
                      {1, 1, 0, 0, 0},
                      {0, 1, 1, 0, 0},
                     };
    hamCycle(graph2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Hea*_*ner 5

C 和 C++ 不是同一种语言。newc 中没有关键字,因为它不是面向对象的语言

int *path = new int [V]; 在 c 中不存在。

如果你想分配一个大小为 V 的整数数组,你可以做两件事

int *path = malloc(V*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

或者

int path[V];
Run Code Online (Sandbox Code Playgroud)