void CreatGraph(AdjLGraph *G,DataType v[],int n,RowCol d[],int e){ int i,k; AdjInitiate(G); for(i=0;i<n;i++) InsertVertex(G,i,v[i]); for(k=0;k<e;k++) InsertEdge(G, d[k].row,d[k].col, d[k].weight); //有出入 } 若以此方式创建图,主函数该输入什么内容,请给出示例
时间: 2024-01-21 20:04:39 浏览: 59
主函数需要输入以下内容:
1. 顶点的个数n;
2. 顶点的值v[],长度为n;
3. 边的个数e;
4. 边的信息d[],包括每条边的起点、终点和权重。
示例代码:
```
int main() {
AdjLGraph G;
int n = 5; // 顶点个数
DataType v[] = {'A', 'B', 'C', 'D', 'E'}; // 顶点的值
RowCol d[] = {{0, 1, 1}, {0, 2, 3}, {1, 2, 1}, {1, 3, 7}, {2, 3, 5}, {2, 4, 1}, {3, 4, 2}}; // 边的信息
int e = 7; // 边的个数
CreatGraph(&G, v, n, d, e); // 创建图
return 0;
}
```
相关问题
417 29 C:\Users\梁帅\Documents\xiangmu1\未命名.数据结构.cpp [Error] cannot convert 'adjmgraph*' to 'adjlgraph*' for argument '1' to 'void creatgraph(adjlgraph*, datatype*, int, rowcolweight*, int)'
看起来你在使用一个函数 `creatgraph(adjlgraph*, datatype*, int, rowcolweight*, int)` 时传入了错误的参数类型。具体来说,你传入了一个 `adjmgraph*` 类型的参数,但是该函数的第一个参数需要的是一个 `adjlgraph*` 类型的参数。
你需要检查一下你的代码,看看在哪里定义了 `adjmgraph` 和 `adjlgraph` 类型,并且确认你调用 `creatgraph()` 函数时传入的参数类型是否正确。如果需要,你可能需要进行类型转换。
void creatGraph(Graph* G, VertexType ver[], VertexType edge[][2]); void DFS(Graph* G, int k, int*_visit, char** res); void BFS(Graph* G, int*_visit, char res[]); void DestroyGraph(Graph*G); void Print(Graph*G);用c语言补全这些函数代码
下面是这些函数的代码实现:
```c
#define MAX_VERTEX_NUM 100 // 最大顶点数
typedef char VertexType; // 顶点类型
typedef struct {
VertexType vexs[MAX_VERTEX_NUM]; // 顶点数组
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 顶点数,边数
} Graph;
// 创建图
void creatGraph(Graph* G, VertexType ver[], VertexType edge[][2]) {
int i, j, k;
G->vexnum = sizeof(ver) / sizeof(VertexType);
G->arcnum = sizeof(edge) / sizeof(VertexType) / 2;
for (i = 0; i < G->vexnum; i++) {
G->vexs[i] = ver[i]; // 顶点数组赋值
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = 0; // 初始化邻接矩阵
}
}
for (k = 0; k < G->arcnum; k++) {
i = j = -1;
// 查找边的两个顶点在顶点数组中的下标
for (int l = 0; l < G->vexnum; l++) {
if (edge[k][0] == G->vexs[l]) {
i = l;
}
if (edge[k][1] == G->vexs[l]) {
j = l;
}
}
if (i != -1 && j != -1) {
G->arcs[i][j] = G->arcs[j][i] = 1; // 无向图,两个方向都要标记
}
}
}
// 深度优先遍历
void DFS(Graph* G, int k, int*_visit, char** res) {
int i;
res[*_visit] = &(G->vexs[k]); // 将遍历到的顶点存入 res 数组
*_visit += 1;
_visit[k] = 1; // 标记该顶点已被访问
for (i = 0; i < G->vexnum; i++) {
if (G->arcs[k][i] && !_visit[i]) {
DFS(G, i, _visit, res); // 递归访问邻接顶点
}
}
}
// 广度优先遍历
void BFS(Graph* G, int*_visit, char res[]) {
int i, j, k;
int queue[MAX_VERTEX_NUM], front = 0, rear = 0;
for (i = 0; i < G->vexnum; i++) {
if (!_visit[i]) {
res[rear++] = G->vexs[i]; // 将未被访问的顶点加入队列
_visit[i] = 1; // 标记该顶点已被访问
}
while (front < rear) {
k = queue[front++]; // 出队一个顶点
for (j = 0; j < G->vexnum; j++) {
if (G->arcs[k][j] && !_visit[j]) {
res[rear++] = G->vexs[j]; // 将邻接顶点加入队列
_visit[j] = 1; // 标记该顶点已被访问
}
}
}
}
}
// 销毁图
void DestroyGraph(Graph*G) {
G->vexnum = 0;
G->arcnum = 0;
}
// 打印图
void Print(Graph*G) {
int i, j;
printf("顶点数:%d,边数:%d\n", G->vexnum, G->arcnum);
printf("顶点数组:");
for (i = 0; i < G->vexnum; i++) {
printf("%c ", G->vexs[i]);
}
printf("\n邻接矩阵:\n");
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
printf("%d ", G->arcs[i][j]);
}
printf("\n");
}
}
```
阅读全文