#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxVertexNum 100 //最大顶点数
#define INFINITY 65535 //假设无穷大为这个数
typedef int Vertex; //假设顶点为int类型
typedef int WeightType; // 假设权值为int类型
typedef char DataType; // 假设顶点存储的数据类型设为字符型
//邻接矩阵图定义
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; // 顶点数
int Ne; // 边数
WeightType G[MaxVertexNum][MaxVertexNum]; // 邻接矩阵
DataType Data[MaxVertexNum]; // 存顶点数据
};
typedef PtrToGNode MGraph; //MGraph是一个指向结构体GNode的指针
//边的定义
typedef struct ENode *PtrToENode;
struct ENode{
Vertex V1, V2; // 顶点
WeightType Weight; // 权值
};
//初始化一个只有顶点,没有边的图
typedef PtrToENode Edge; //Edge是指向ENode结构体的一个指针
MGraph CreateGraph(int VertexNum){
int i,j;
MGraph Graph;
Graph=(MGraph)malloc(sizeof(struct GNode)); //分配一个图的结构空间
Graph->Nv=VertexNum; //顶点
Graph->Ne=0; // 边
for(i=0; i<Graph->Nv; i++) // 2个for循环初始化邻接矩阵(二维数组),每个值为无穷大
for(j=0; j<Graph->Nv; j++)
Graph->G[i][j]=INFINITY;
return Graph;
}
//插入边
void InsertEdge(MGraph Graph, Edge E){
Graph->G[E->V1][E->V2]=E->Weight;
}
//建立邻接矩阵
MGraph BuildGraph(){
MGraph Graph;//声明一个图结构体
ENode* E;//声明一条边的结构指针
int Nv, i;
char c1, c2;
int j;
printf("请输入顶点个数:");
scanf("%d", &Nv);
Graph=CreateGraph(Nv);// 初始化一个只有Nv个顶点,没有边的图
//读入顶点数据
getchar();
printf("\n请输入顶点数据(注意中间不能带空格,例如输入abcd表示顶点为a,b,c,d):");
for(i=0; i<Nv; i++){
scanf("%c", &(Graph->Data[i]));
}
printf("请输入边个数:");
scanf("%d", &(Graph->Ne));
if(Graph->Ne!=0){
E=(Edge)malloc(sizeof(struct ENode));// 为边创建一个三元组空间(包括V1,v2,weight)空间
for(i=0; i<Graph->Ne; i++){getchar();
printf("\n请输入起点v1:");
c1=getchar();
printf("\n请输入终点v2:");
getchar();
c2=getchar();
printf("\n权值weight:");
scanf("%d",&E->Weight);
for(j=0;j<Nv; j++) if(Graph->Data[j]==c1) {E->V1=j;break;}
for(j=0;j<Nv; j++) if(Graph->Data[j]==c2) {E->V2=j;break;}
InsertEdge(Graph, E);
}
}
printf("\n邻接矩阵如下:\n");
for(i=0;i<Graph->Nv;i++){
for(j=0;j<Graph->Nv;j++){
if(Graph->G[i][j]==INFINITY) printf(" ∞ ");
else printf(" %d ",Graph->G[i][j]);
}
printf("\n");
}
return Graph;
}
int main(){
BuildGraph();
}
有向图的创建(用c++编译运行)
于 2024-04-12 19:32:28 首次发布
本文介绍了如何使用C语言定义邻接矩阵图结构,包括创建一个只有顶点的图、插入边以及打印出完整的邻接矩阵。程序通过用户输入顶点数、数据和边的信息来构建和操作图。
摘要由CSDN通过智能技术生成