什么是边缘列表?不是邻接列表.. 我们如何在C编程中表示边缘列表,前提是我们给出了一个包含节点和边的图?
答案 0 :(得分:0)
这是基础结构
struct Edge
{
int id;
int weight; // If you need one
vector<Edge *> neighbours; // List of references on your neightbours
}
vector<Edge> graph;
但迈克尔注意到它确实看起来像个作业:)看看启动图库。
更新 C版
struct Edge
{
int id;
int weight; // If you need one
Edge *next; // Next edge in the list
Edge *neighbours; // List of neightbours
}
Edge *graph;
答案 1 :(得分:0)
使用边缘列表的定义here,并假设无向边,模拟“人”表示将是一个很好的第一次尝试:
typedef struct UndirectedEdge {
int ends[2];
};
您的顶点全部在int
范围内编号。如果他们被指示:
typedef struct DirectedEdge {
int from;
int to;
}
根据需要添加其他属性,其类型适合您的问题:
typedef struct WeightedEdge {
size_t from;
size_t to;
double weight;
}
请注意,不需要顶点列表,除非将整数顶点索引映射到人类可读标签(如果它们存在于初始问题中)。此外,您应该为边缘列表定义合适的比较函数,以确保边缘的唯一性,具体取决于图形的属性,例如定向性。
typedef struct EdgeList {
size_t edge_count;
EdgeType *edges;
}
_Bool undirected_edge_equal(UndirectedEdge *this, UndirectedEdge *other) {
return this->ends[0] == other->ends[0] && this->ends[1] == other->ends[1]
|| this->ends[0] == other->ends[1] && this->ends[1] == other->ends[0]
}
_Bool directed_edge_equal(DirectedEdge *this, DirectedEdge *other) {
return this->from == other->from && this->to == other->to;
}