图的基本操作
图的基本操作
基本操作
- Adjacent(G,x,y):判断图G是否存在边<x,y>或(x,y)。
- 无向图
- 有向图
- 代码实现
1
2
3int Adjacent(Graph *graph, int src, int dest) {
return graph->edges[src][dest];
}
- Neighbors(G, x):列出图G中与结点x邻接的边。
- 无向图
- 有向图
- 代码实现
1
2
3
4
5
6
7void neighbors(Graph *graph, int vertex) {
for (int i = 0; i < graph->numVertices; i++) {
if (graph->edges[vertex][i] == 1) {
printf("Edge: <%d, %d>\n", vertex, i);
}
}
}
- Insertvertex (G,x):在图 G 中插入顶点 x。
- 代码实现
1
2
3void insertVertex(Graph *graph, int vertex) {
graph->vertices[vertex] = 1;
}
- DeleteVertex (G, x):从图 G 中删除顶点 x。
- 无向图
- 有向图
- 代码实现
1
2
3
4
5
6
7void deleteVertex(Graph *graph, int vertex) {
graph->vertices[vertex] = 0;
for (int i = 0; i < graph->numVertices; i++) {
graph->edges[vertex][i] = 0;
graph->edges[i][vertex] = 0;
}
}
- AddEdge (G, x, y):若无向边(x,y)或有向边<x,y>不存在,.则向图G中添加该边
- 代码实现
1
2
3
4
5
6
7
8
9// 有向图
void addEdge(Graph *graph, int src, int dest) {
graph->edges[src][dest] = 1;
}
// 无向图
void addEdge(Graph *graph, int src, int dest) {
graph->edges[src][dest] = 1;
graph->edges[dest][src] = 1;
}
- RemoveEdge (G, x, y):若无向边(x,y)或有向边<x,y>存在,则从图G中删除该边.
- 代码实现
1
2
3
4
5
6
7
8
9// 有向图
void removeEdge(Graph *graph, int src, int dest) {
graph->edges[src][dest] = 0;
}
// 无向图
void removeEdge(Graph *graph, int src, int dest) {
graph->edges[src][dest] = 0;
graph->edges[dest][src] = 0;
}
- FirstNeighbor (G, x):求图G中顶点x的第一个邻接点,若有则返回顶点号。若x没有邻接点或图中不存在x,则返回-1。
- 无向图
- 有向图
- 代码实现
1
2
3
4
5
6
7
8int firstNeighbor(Graph *graph, int vertex) {
for (int i = 0; i < graph->numVertices; i++) {
if (graph->edges[vertex][i] == 1) {
return i;
}
}
return -1;
}
- NextNeighbor (G, x, y):假设图G中顶点y是顶点x的一个邻接点,返回除y外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点,则返回-1。
- 代码实现
1
2
3
4
5
6
7
8int nextNeighbor(Graph *graph, int vertex, int neighbor) {
for (int i = neighbor + 1; i < graph->numVertices; i++) {
if (graph->edges[vertex][i] == 1) {
return i;
}
}
return -1;
}
完整代码
1 |
|
图的基本操作
https://lzyjx.github.io.git/2023/05/23/图的基本操作/