#include<bits/stdc++.h> using namespace std; #define MAXVEX 1000 //最大顶点数 typedef char VertexType; typedef struct ENode { int adjVertex; //该边所指的顶点编号 int weight; //边权 struct ENode *nextEdge; //下一条边 } ENode; typedef struct VNode { VertexType data; //顶点信息 int visited; //遍历标记. 1:已遍历 0:未遍历 ENode *firstEdge; //第一条出边 } VNode; typedef struct { VNode vexs[MAXVEX]; int vertexNum,edgeNum; //点数和边数 }AdjGraph,*Graph; Graph createGraph(); int main() { /*此处代码由测试程序自动添加,主要为了向顺序表中插入数据 并输出数据,你无需关心此处代码的具体实现细节。 如果有必要,请自己添加代码以测试你的函数是否正确。 */ return 0; },写出createGraph
时间: 2024-02-05 20:04:32 浏览: 57
好的,下面是一个简单的createGraph函数的示例代码:
```
Graph createGraph(int vertexNum, int edgeNum) {
Graph graph = new AdjGraph; // 创建一个邻接表图
graph->vertexNum = vertexNum; // 设置顶点数
graph->edgeNum = edgeNum; // 设置边数
// 读取每个顶点的数据
for (int i = 0; i < vertexNum; i++) {
cout << "请输入第" << i+1 << "个顶点的数据: ";
cin >> graph->vexs[i].data;
graph->vexs[i].visited = 0; // 设置未遍历
graph->vexs[i].firstEdge = NULL; // 设置第一条边为空
}
// 读取每条边的信息,并建立邻接表
for (int i = 0; i < edgeNum; i++) {
int u, v, w; // u为起点, v为终点, w为权值
cout << "请输入第" << i+1 << "条边的起点、终点、权值: ";
cin >> u >> v >> w;
// 创建一个新的边节点
ENode* newEdge = new ENode;
newEdge->adjVertex = v;
newEdge->weight = w;
newEdge->nextEdge = NULL;
// 将新节点插入到起点的邻接表中
if (graph->vexs[u-1].firstEdge == NULL) {
graph->vexs[u-1].firstEdge = newEdge;
} else {
ENode* p = graph->vexs[u-1].firstEdge;
while (p->nextEdge != NULL) {
p = p->nextEdge;
}
p->nextEdge = newEdge;
}
}
return graph;
}
```
这个函数接收两个参数vertexNum和edgeNum,分别表示图的顶点数和边数。函数中首先创建一个空的邻接表图,然后读取每个顶点的数据,并设置其未遍历和第一条边为空。接着,读取每条边的信息,并创建一个新的边节点,然后将新节点插入到起点的邻接表中。最后,返回创建好的邻接表图。
阅读全文