用c++和c语言写一个“图的基本操作"程序
时间: 2023-12-03 21:02:57 浏览: 166
用C语言实现图的基本操作
5星 · 资源好评率100%
下面是一个简单的图的基本操作程序,包括顶点的添加、删除,边的添加、删除以及打印图的信息等操作,使用C++语言实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
class Graph {
private:
int v; // 顶点数
vector<int> *adj; // 存储图的邻接表
public:
// 构造函数,创建一个有V个顶点但没有边的图
Graph(int v) {
this->v = v;
adj = new vector<int>[v];
}
// 添加一条边
void addEdge(int src, int dest) {
adj[src].push_back(dest);
adj[dest].push_back(src);
}
// 删除一条边
void removeEdge(int src, int dest) {
for (vector<int>::iterator it = adj[src].begin(); it != adj[src].end(); it++) {
if (*it == dest) {
adj[src].erase(it);
break;
}
}
for (vector<int>::iterator it = adj[dest].begin(); it != adj[dest].end(); it++) {
if (*it == src) {
adj[dest].erase(it);
break;
}
}
}
// 添加一个顶点
void addVertex() {
v++;
vector<int> *newadj = new vector<int>[v];
for (int i = 0; i < v - 1; i++) {
newadj[i] = adj[i];
}
adj = newadj;
}
// 删除一个顶点
void removeVertex(int vertex) {
int index = 0;
for (vector<int>::iterator it = adj[vertex].begin(); it != adj[vertex].end(); it++) {
removeEdge(vertex, *it);
}
adj[vertex].clear();
for (int i = 0; i < v; i++) {
for (vector<int>::iterator it = adj[i].begin(); it != adj[i].end(); it++) {
if (*it == vertex) {
adj[i].erase(it);
break;
}
}
}
v--;
vector<int> *newadj = new vector<int>[v];
for (int i = 0; i < v; i++) {
if (i == vertex) {
index = 1;
}
newadj[i] = adj[i + index];
}
adj = newadj;
}
// 打印图的信息
void printGraph() {
for (int i = 0; i < v; i++) {
cout << i << ": ";
for (vector<int>::iterator it = adj[i].begin(); it != adj[i].end(); it++) {
cout << *it << " ";
}
cout << endl;
}
}
};
int main() {
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 3);
g.printGraph();
g.addVertex();
g.addEdge(4, 2);
g.printGraph();
g.removeVertex(2);
g.printGraph();
return 0;
}
```
使用C语言实现一个图的基本操作程序也可以,但是需要手动实现动态数组和链表等数据结构,比较复杂。
阅读全文