资源简介
要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的深度优先搜索遍历路径。
代码片段和文件信息
#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>=
评论
共有 条评论