数据结构 无向图矩阵

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/********* 所包含的库文件 ****************************/
#include
#include
#include
#include
#include
using namespace std;
/********** 宏定义 **************************/
typedef int ElemType ; /* 元素类型 */
typedef int Status ; /* 逻辑形态*/
typedef int VRType; /*顶点信息*/
typedef int InfoType; /*弧信息*/
typedef char VertexType ; /*顶点函数值*/
#define OVERFLOW 2 /*益出标志*/
#define OK 1 /*代表逻辑 */
#define ERROR 0 /*代表逻辑假*/

/*******************邻接矩阵的存储定义**********************/
#define INIFINITY 0 // 最大值
#define MAX_VERTEX_NUM 20 //最大顶点数
typedef enum {DG,DN,UDG,UDN} GraphKind; //{有向图,有向网,无向图,无向网}
typedef struct
{
int adj; //顶点关系类型 无权图 1,0 VRType
InfoType *info; //弧的相关信息
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //顶点数和弧的数目
GraphKind kind; //图的种类
}MGraph; // 图的定义
/**********************具体实现**************************/
//坐落函数
int LocateVex(MGraph G,char u)
{//给出vi求出G中的具体位置
int i;
for(i=0;i{ if(u==G.vexs[i]) return i;}
if(i==G.vexnum) {printf("Error u!\n"); exit(1);
}
return 0;
}
//建无向图(邻接矩阵)
Status CreateUDG(MGraph &G) //scanf("%c",&G.vexs[i]);
{
int w,i,j,k;
char v1,v2;
printf("请输入矩阵的定点个数和弧数\n");
scanf("%d %d",&G.vexnum,&G.arcnum);
for(i=0;i>G.vexs[i]; }//建立顶点向量
for(i=0;ifor(j=0;jfor(k=0;k{
printf("请输入邻接矩阵的关联信息{eg:v1->v2=w(v~顶点 w~权值)}\n");
cin>>v1>>v2>>w;
i=LocateVex(G,v1); j=LocateVex(G,v2); G.arcs[i][j].adj=w; //确定V1,V2在G中的位置
//若弧有信息则输入if(IncInfo) Input(*G.arcs[i][j]);
G.arcs[j][i].adj=G.arcs[i][j].adj; //置的对称弧
}//for k
return OK;
}//CreateUDN
//选择建图的类型
Status CreateGraph(MGraph &G)
{
int i;
printf("请输入你要建的图类型(1~DG~有向图 2~DN~有向网 3~UDG~无向图 4~UDN~有向网)");
scanf("%d",&i);
G.kind=(GraphKind)(i-1);
switch(G.kind)
{
// case DG :return CreateDG(G); //构造有向图G
// case DN :return CreateDN(G); //构造有向网G
case UDG :

return CreateUDG(G); //构造无向图G
// case UDN :return CreateUDN(G); //构造有向网G
default :return ERROR;
}
}//CreateGraph
//图的显示
void printf_adjmatrix(MGraph G)
{
int i,j;
printf("邻接矩阵:\nvertex\t");
for(i=0;iprintf("%4c",G.vexs[i]);
printf("\n");
for(i=0;i{
printf("%4c\t",G.vexs[i]);
for(j=0;j{
printf("%4d",G.arcs[i][j].adj);
}
printf("\n");

}
}
//计算顶点的度
int Du(MGraph G)
{
int i,j,cout=0;
for(i=0;i{
for(j=0;j{
if(G.arcs[i][j].adj) cout++;
}
}
return cout;
}

/***********************图主函数*************************/
void main()
{
MGraph G;
CreateGraph(G);
system("cls");
printf_adjmatrix(G);
printf("度的个数%d\n",Du(G));
}

相关文档
最新文档