图的存储结构分析
- 格式:docx
- 大小:13.81 KB
- 文档页数:7
}VNode,AdjList[MaxVertexNum];
typedef struct
{
AdjList vertices;
int vexnum,arcnum; //图的当前顶点数和弧数
}ALGraph;
typedef struct QNode
{
DFSTraverse(G,j);
}
}
}
void DFS(MGraph &G)
{
int i;
for(i=0;i<G.vexnum;i++) Visit[i]=false;
for(i=0;i<G.vexnum;i++)
{
if(!Visit[i])
{
DFSTraverse(G,i);
}
}
}
void main()
{
MGraph graph;
CreateUDG(graph);
printf("顶点集合为::");
for (int i=0;i<graph.vexnum;++i).vexs[i]);
printf("\n深度遍历结果是:");
DFS(graph);
printf("\n");
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return;
}
QElemType DeQueue(LinkQueue &Q,QElemType &e)
{
Queueptr p;
if(Q.front==Q.rear) return ' ';
{
QElemType data;
struct QNode *next;
}QNode,*Queueptr;
typedef struct
{
Queueptr front;
Queueptr rear;
}LinkQueue;
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (Queueptr)malloc(sizeof(QNode));
typedef struct ArcNode
{
int adjvex; //该弧指向的顶点位置
struct ArcNode *nextarc; //指向下一条弧的指针
InfoType *info;
}ArcNode;
typedef struct VNode
{
VertexType data; //顶点信息
typedef struct ArcCell
{
VRType adj;
}ArcCell,AdjMatrix[MaxVertexNum][MaxVertexNum];
typedef struct
{
VertexType vexs[MaxVertexNum];
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
GraphKind kind;
}MGraph;
int LocateVex(MGraph G,VertexType v)
{
for(int i=0;i<G.vexnum;++i)
{
if(v==G.vexs[i])
return i;
}
if (i = G.vexnum)
printf("输入的顶点不合法\n");
return 0;
}
VertexType v1,v2;
VRType w;
void CreateUDG(MGraph &G)
{
int i,j,k;
printf("请输入顶点数:\n");
scanf("%d",&G.vexnum);
printf("请输入弧数:\n");
scanf("%d",&G.arcnum);
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear==p)
Q.rear = Q.front;
}
for(k=0;k<G.arcnum;++k)
{
printf("请输入一条边依附的顶点及权值(v1 v2 w)\n");
getchar();
scanf("%c %c %d",&v1,&v2,&w);
i =LocateVex(G,v1);
j =LocateVex(G,v2);
G.arcs[i][j].adj= w;
if(!Q.front) return;
Q.front->next = NULL;
return;
}
void EnQueue(LinkQueue &Q,QElemType e)
{
Queueptr p = NULL;
p = (Queueptr)malloc(sizeof(QNode));
if(!p) return;
i = 0;
while(i<G.vexnum)
{
printf("请输入第%d个顶点\n",i);
getchar();
scanf("%c",&G.vexs[i]);
++i;
}
for(i=0;i<G.vexnum;++i)
{
for(j=0;j<G.vexnum;++j)
G.arcs[i][j].adj = 0;
G.arcs[j][i] = G.arcs[i][j];
}
return;
}
void DFSTraverse(MGraph &G,int i)
{
printf("%c ",G.vexs[i]);
Visit[i]=true;
for(int j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j].adj==1&&!Visit[j])
return;
}
2.邻接表
#include "stdio.h"
#include "stdlib.h"
#define MaxVertexNum 20
typedef int InfoType;
typedef char VertexType;
typedef VertexType QElemType;
bool visited[MaxVertexNum];
1.邻接矩阵
#include "stdio.h"
#define Infinity 100
#define MaxVertexNum 20
typedef enum {DG,DN,UDG,UDN} GraphKind;
typedef int VRType;
typedef char VertexType;
bool Visit[MaxVertexNum];