希望求一个图的相关操作,其中包括无向图的邻接矩阵 ,内容有添加顶点和添加边,以及进行DFS,BFS遍历所创建的图,最后根据所建的图每条边的权值用迪杰斯特拉算法求一下某点到另一点的最短路径。
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAX 100
typedef struct graph {
char vertex[MAX];
int arc[MAX][MAX];
int edgnum;
int vernum;
}Graph;
typedef struct edg {
int weight;
}Edg;
typedef struct ver {
char ver;
}Ver;
void addver(Graph *G, char ver) {
if (ver >= 97 && ver <= 122) {
ver = (char)(ver - 32);
}
G->vertex[G->vernum] =ver;
G->vernum++;
}
void addedg(Graph *G, char v, char w, int weight) {
int r = toz(G,v);
int c = toz(G,w);
G->arc[r][c] = weight;
G->arc[r][r] = weight;
G->edgnum++;
}
int toz(Graph *G, char ver) {
int a;
if (ver >= 97 && ver <= 122) {
a = ver - 32 - 65;
}
else {
a = ver - 65;
}
return a;
}
void show(Graph* G) {
int n = G->vernum;
for (int i = 0; i < n; i++) {
printf("c%", G->vertex[i] + "\t\t");
}
printf("\n");
for (int i = 0; i < n; i++) {
printf("c%", G->vertex[i] + "\t");
for (int j = 0; j < n; j++) {
printf("d%", G->arc[i][j] + "\t\t");
}
printf("\n");
}
}
void main() {
Graph G;
addver(&G, 'a');
addver(&G, 'b');
addver(&G, 'c');
addver(&G, 'd');
addedg(&G, 'a', 'b',10);
addedg(&G, 'a', 'c', 8);
show(&G);
}
这是我尝试写的一点内容但不能成功实现。
我想要达到的效果,不要输入值运行,而是直接根据所给的参数直接添加,就像我写的方法那样差不多,比如void addedg(Graph *G, char v, char w, int weight)这样添加边。
谢谢了,我知道这个要求可能有点多,但是我实在没有想法了,如果能实现,在此先感谢了。