采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径
十一、采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径#include "stdio.h" #include "stdlib.h" #include "malloc.h" #define
十一、采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径 #include"stdio.h" #include"stdlib.h" #include"malloc.h" #definemax100// 顶点的最大个数 #defineNULL0 typedefstructst1{// 定义邻接表中结点类型 intadjvex;// 邻接点的位置 structst1*nextarc;// 指向下一个结点 charinfo;// 边的信息 }Arcnode; typedefstruct{// 定义邻接表中头结点类型 charvexdata;// 顶点信息 Arcnode*firstarc;// 指向第一个邻接结点 }AdjList; typedefstruct{// 定义邻接表表头 AdjListvextices[max];// 存放表头结点信息 intvexnum,arcnum;// 有向图的顶点数和边数 }AlGraph; intvisited[max];//01 定义深度优先搜索遍历数组,表示未被访问过,表示已被访问过 intflag=0;//10 定义全局标志变量,用来确定两点间是否为通路,表示存在,表示不存在 ///////////////////////////////////////////////////////////////////// 建立邻接表 AlGraph*create_AdjListGraph(){ intn,e,i,j,k; Arcnode*p; AlGraph*al; al=(AlGraph*)malloc(sizeof(AlGraph)); printf(""); 请输入结点数: scanf("%d",&n); for(i=1;i<=n;i++){// 初始化表头结点数组 al->vextices[i].vexdata=(char)i;// 数据域存放顶点序号 al->vextices[i].firstarc=NULL; } printf(""); 请输入边数: scanf("%d",&e); printf(""); 请输入弧的信息: for(i=0;i<e;i++){ scanf("%d%d",&j,&k);//kj 依次读入弧的信息,结点为结点的邻接点 p=(Arcnode*)malloc(sizeof(Arcnode));// 申请结点空间,分配结点 p->adjvex=k; p->info=''; p->nextarc=al->vextices[j].firstarc; al->vextices[j].firstarc=p; }

