Member 14015044 Ответов: 1

Пожалуйста, попробуйте найти код, так как я не смог найти правильный результат


Граф-это абстрактно набор вершин, которые помечены
неотрицательные целые числа и набор ребер. Граф называется
неориентированный граф, если мы говорим просто о наличии ребра между
вершины i и j, а не ее направление.

Например, ниже приведен график:


В этой задаче задаются ребра в неориентированном графе. Один
ребро-это пара неотрицательных целых чисел (i, j), которая указывает на то, что
vetex i соединен с vetex j ребром.

После этого вам будет присвоен номер вершины n. Вы должны вывести
список вершин, которые соединены ребром N, в порядке в
какие края были входными данными.

Ввод

Вам дается следующее.

1. Первая строка содержит целое число, E, между 1 и 1000

2. После этого по электронной линии, где каждый из которых содержит пару
числа i и j, где i и j-неотрицательные целые числа <=
34,000. Ни одно ребро не будет перечислено более одного раза.

3. Последняя строка содержит неотрицательное целое число n &ЛТ;= 34,000. п
конечно, это вершина, указанная в одной из строк Е в части (2).

Выход

Вы должны вывести список узлов, к которым n имеет ребро, в виде
порядок, в котором были введены ребра, по одной строке для каждой вершины.

Что я уже пробовал:

#include <stdio.h> 
#include <stdlib.h> 
   
struct AdjListNode 
{ 
    int dest; 
    struct AdjListNode* next; 
}; 
  
struct AdjList 
{ 
    struct AdjListNode *head;  
}; 
   
struct Graph 
{ 
    int V; 
    struct AdjList* array; 
}; 
  
struct AdjListNode* newAdjListNode(int dest) 
{ 
    struct AdjListNode* newNode = 
     (struct AdjListNode*) malloc(sizeof(struct AdjListNode)); 
    newNode->dest = dest; 
    newNode->next = NULL; 
    return newNode; 
} 
  
// A utility function that creates a graph of V vertices 
struct Graph* createGraph(int V) 
{ 
    struct Graph* graph =  
        (struct Graph*) malloc(sizeof(struct Graph)); 
    graph->V = V; 
  
    graph->array =  
      (struct AdjList*) malloc(V * sizeof(struct AdjList)); 
  
    int i; 
    for (i = 0; i < V; ++i) 
        graph->array[i].head = NULL; 
  
    return graph; 
} 
  
void addEdge(struct Graph* graph, int src, int dest) 
{ 
   
    struct AdjListNode* newNode = newAdjListNode(dest); 
    newNode->next = graph->array[src].head; 
    graph->array[src].head = newNode; 
  
    newNode = newAdjListNode(src); 
    newNode->next = graph->array[dest].head; 
    graph->array[dest].head = newNode; 
} 
  
void printGraph(struct Graph* graph) 
{ 
    int v; 
    for (v = 0; v < graph->V; ++v) 
    { 
        struct AdjListNode* pCrawl = graph->array[v].head; 
        printf("\n Adjacency list of vertex %d\n head ", v); 
        while (pCrawl) 
        { 
            printf("-> %d", pCrawl->dest); 
            pCrawl = pCrawl->next; 
        } 
        printf("\n"); 
    } 
} 
   
int main() 
{ 
   
    int V = 5; 
    struct Graph* graph = createGraph(V); 
    addEdge(graph, 0, 1); 
    addEdge(graph, 0, 4); 
    addEdge(graph, 1, 2); 
    addEdge(graph, 1, 3); 
    addEdge(graph, 1, 4); 
    addEdge(graph, 2, 3); 
    addEdge(graph, 3, 4); 
  
    return 0; 
}

Richard MacCutchan

И вот в чем вопрос?

ZurdoDev

У вас есть вопрос?

Dave Kreskowiak

Вы не описали проблему, с которой столкнулись, и никаких сообщений об ошибках.

То, что вы сделали, называется "Кто-то делает мою работу за меня". Этого не случится.

1 Ответов

Рейтинг:
0

Rick York

Поскольку ты не задал ни одного вопроса, у меня нет ответа. Однако у меня есть рекомендация по коду. Ваша последовательность из трех структур данных избыточна. Можно было бы и поработать. В основном потому, что структура AdjList совершенно бесполезна. Какой смысл иметь структуру с одним членом? Пример этого члена является тем же самым и более очевидным. Два других имеют целое число и указатель на элемент того же типа. Если они одинаковы, то почему их двое? Таким образом, остается только одна структура, которая может выглядеть примерно так:

struct ListNode 
{ 
    int integer; 
    struct ListNode * pnext; 
};
Целое число называется dest в одном и V в другом. На самом деле нет необходимости иметь две структуры и два набора кода для доступа к ним, когда они по существу одинаковы. В C++ вы можете сделать это шаблонным классом или структурой и содержать любой тип данных, который вы хотите.