• 大小: 5KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: 其他
  • 标签:

资源简介

要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的深度优先搜索遍历路径。

资源截图

代码片段和文件信息

#include
#include
#include
#include

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0

typedef int Status;
//=========================================================队列定义
typedef struct Node
{
 int elem;
 struct Node *next;
}Node*QNode;

typedef struct
{
 QNode front;
 QNode rear;
}Queue;
//=======================================================图的结构定义

#define MAX 20

typedef struct ArcNode      //表节点
{
 int adjvex;             //该边所指向的顶点的位置
 struct ArcNode *nextarc; //指向下一条边
}ArcNode;

typedef struct VNode          //头节点
{
 int data;               //顶点信息
 ArcNode *firstarc;      //指向第一条依附该节点的边的指针
}VNodeAdjList[MAX];

typedef struct
{
 AdjList vertices;    //头节点
 int vexnum;          //节点的个数
 int arcnum;          //边的条数
}Graph;
//=================================================队列函数

Status InitQueue(Queue *Q)
{
 Q->front=Q->rear=(QNode)malloc(sizeof(Node));
 if(!Q->front) exit(OVERFLOW);
 Q->front->next=NULL;
 return OK;
}
Status EnQueue(Queue *Qint e)
{
 QNode p=(QNode)malloc(sizeof(Node));
 if(!p) exit(OVERFLOW);
 p->elem=e;
 p->next=NULL;
 Q->rear->next=p;
 Q->rear=p;
 return OK;
}
Status DeQueue(Queue *Qint *e)
{
 QNode p;
 p=Q->front->next;
 Q->front->next=p->next;
 if(Q->rear==p)
  Q->rear=Q->front;
 *e=p->elem;
 free(p);
 return OK;
}

Status QueueEmpty(Queue Q)
{
 if(Q.rear==Q.front)
   return TRUE;
 else
   return FALSE;
}

//========================================================图函数
int LocateVex(Graph *Gint v)   //返回节点v在图中的位置
{
int i;
for(i=0;ivexnum;++i)
if(G->vertices[i].data==v)//data表示顶点号
break;
else
continue;
if(ivexnum)
return i;
else
return -1;//出错
}

Status CreateGraph(Graph *G)
{//以邻接表形式创建无向连通图G
int mnijkv1v2flag=0;
ArcNode *p1*q1*p*q;
printf(“输入顶点数(小于20):“);
scanf(“%d“&m);
printf(“输入弧数:“);
scanf(“%d“&n);
G->vexnum=m;           //顶点数目
G->arcnum=n;           //边的数目
for(i=0;ivexnum;++i)
{
G->vertices[i].data=i+1;     //顶点信息,顶点赋值
G->vertices[i].firstarc=NULL;
}
    //==================================顶点信息
printf(“各个虚拟节点:\n“);
for(i=0;ivexnum;++i)
printf(“v%d\n“G->vertices[i].data);
for(k=0;karcnum;++k)
{
printf(“输入第%d对弧头弧尾: “k+1);
scanf(“%d%d“&v1&v2);
i=LocateVex(Gv1);//返回节点v1在图中的位置
j=LocateVex(Gv2);//返回节点v2在图中的位置
if(i>=

评论

共有 条评论

相关资源