c语言实现:
关于图的具体理论解释等可以移步b站:https://www.bilibili.com/video/BV1nJ411V7bd?p=114&spm_id_from=pageDriver
理解完理论部分下面是具体代码实现:
一、变量的声明与结构体的定义
小编实现的是有向图<v1,w1>
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_NUM 100
typedef bool Status;//判断类型
typedef char VerTexType;//顶点的数据类型
typedef int ArcType;//所建成邻接矩阵的元素类型(0或1)
typedef struct {
VerTexType vexs[MAX_NUM];//顶点元素数组
ArcType arcs[MAX_NUM][MAX_NUM];//邻接矩阵
int vexnum,arcnum;//顶点元素个数 边(弧)的个数
}AMGraph;
二、创建图
Status CreateUDE(AMGraph *G){//创建有向图G,双重指针来操作
int i,j,k;
char v1,v2;
printf("请输入所建图的顶点个数与弧(边)的个数:");
scanf("%d %d",&G->vexnum,&G->arcnum);
getchar(); //消除scanf的回车符 (以下都是如此)
for(i = 0;i<G->vexnum;i++){
printf("请输入第%d个顶点元素为:",i+1);
scanf("%c",&G->vexs[i]); //将输入的各个字符v1、v2...存入vexs[]数组中
getchar();
printf("\n");
}
for(i = 0;i<G->vexnum;i++){ //首相要将arcs这个矩阵初始化,由于是无权的有向图
for(j = 0;j<G->vexnum;j++){ //我们暂且可将 所有的值初始化为 0
G->arcs[i][j] = 0;
}
}
for(k = 0;k<G->arcnum;k++){
printf("请输入第%d条弧的数据:",k+1);
scanf("%c %c",&v1,&v2); //输入有向图的弧入如A B(A->B)
getchar();
i = Location(*G,v1); //确定所输入的v1,v2在vexs字符数组中的位置
j = Location(*G,v2); //并将其存入i,j中 ,并将此位置的0置为1,表示此位置连成一个弧
G->arcs[i][j] = 1;
}
}
Location:
/*
嵌套循环,判断v与vexs字符数组中下标为多少的字符相等
返回其下标带回Creat函数 ,无则返回-1
*/
int Location(AMGraph G,char v){
int i;
for(i = 0;i<G.vexnum;i++){
if(v == G.vexs[i]){
return i;
}
}
return -1;
}
完整代码如下:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_NUM 100
typedef bool Status;
typedef char VerTexType;
typedef int ArcType;
typedef struct {
VerTexType vexs[MAX_NUM];//顶点元素数组
ArcType arcs[MAX_NUM][MAX_NUM];//邻接矩阵
int vexnum,arcnum;//顶点元素个数 边(弧)的个数
}AMGraph;
int Location(AMGraph G,char v){
int i;
for(i = 0;i<G.vexnum;i++){
if(v == G.vexs[i]){
return i;
}
}
return -1;
}
Status CreateUDE(AMGraph *G){
int i,j,k;
char v1,v2;
printf("请输入所建图的顶点个数与弧(边)的个数:");
scanf("%d %d",&G->vexnum,&G->arcnum);
getchar();
printf("\n");
for(i = 0;i<G->vexnum;i++){
printf("请输入第%d个顶点元素为:",i+1);
scanf("%c",&G->vexs[i]);
getchar();
printf("\n");
}
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++){
printf("请输入第%d条弧的数据:",k+1);
scanf("%c %c",&v1,&v2);
getchar();
i = Location(*G,v1);
j = Location(*G,v2);
G->arcs[i][j] = 1;
}
}
int main()
{
AMGraph G;
CreateUDE(&G); //双重指针来操作
int i,j;
for(i = 0;i<G.vexnum;i++){ //最后将这个矩阵输出出来即可
for(j = 0;j<G.vexnum;j++){
printf("%d\t",G.arcs[i][j]);
}
printf("\n");
}
}
运行结果(小黑框运行如下所示):
第一次写博客,想记录一下自己的编程学习日常,头脑一发热就写了,很粗糙就写了点代码而已,下面的博客会将自己作为一个新手的思路想法写下来,同时也希望大家及时给我指正错误等。