邻接表结构函数(GRAPH1.H)。。

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

/* 头文件:graph1.h:邻接表,中的遍历,生成树,关键路径 */

int menu_netselect1()

{ /* 邻接表菜单选择系统 */

char s[8];

int c;

clrscr(); /* 清屏 */

printf("\n");

printf("\n");

printf(" ************************************ \n");

printf(" * * \n");

printf(" * 邻接表结构操作窗口 *

\n");

printf(" * * \n");

printf(" * 无向网:a1.txt; ..... i1.txt; * \n");

printf(" * 有向网:a2.txt; ..... i2.txt; * \n");

printf(" * 无环网:a3.txt; ..... i3.txt; * \n");

printf(" * * \n");

printf(" ************************************ \n");

printf("\n");

printf(" 01:建立邻接表(无向网)\n");

printf(" 02:建立邻接表(有向网)\n");

printf(" 03:输出邻接表结构\n");

printf(" 04:深度遍(连通-非连通)\n");

printf(" 05:广度遍(连通-非连通)\n");

printf(" 06:邻接表 DFS 树\n");

printf(" 07:邻接表 BFS 树\n");

printf(" 08:深度遍历建生成树(无向

网)\n");

printf(" 09:拓扑排序(有向无环网)\n");

printf(" 10:关键路径(有向无环网)\n");

printf(" 11:销毁当前邻接表\n");

printf(" 12:返回主窗口\n");

do {

printf("\n");

printf(" 输入你的选择号:1---12: ");

gets(s);

c=atoi(s);

}while(c<0||c>12);

return(c);

}

int LocateVex1(ALGraph G,VertexType u)

{ /* 若G中存在顶点u,则返回该顶点在邻接表中位置;否则返回-1 */ int i;

for(i=1;i<=G.vex;++i)

if(strcmp(u,G.ver[i].data)==0) return i;

return -1;

}

void DestroyGraph1(ALGraph *G)

{ /* 销毁图(邻接表)G */

int i;

LNode *p,*q;

for(i=1;i<=G->vex;++i) /* 对于所有顶点 */

{

p=G->ver[i].first;

while(p)

{

q=p->next;

free(p);

p=q;

}

}

G->vex=0; /* 顶点数为0 */

G->arc=0; /* 边或弧数为0 */

}

void setlistunnetwork1(ALGraph *G)

{ /* 建立邻接表无向网 */

int i,j,k,w,l=0; /* w是权值 */

VertexType va,vb; /* 连接边或弧的2顶点 */

LNode *p;

char str[13];

FILE *fp;

clrscr(); /* 清屏 */

printf("\n");

printf("\n");

printf(" ************************************ \n");

printf(" * * \n");

printf(" * * \n");

printf(" * 邻接表(无向网)文件载入窗口 *

\n");

printf(" * * \n");

printf(" * * \n");

printf(" * * \n");

printf(" ************************************ \n");

printf("\n");

printf("\n");

printf(" 输入邻接表文件名(可带路径) : ");

gets(str);

fp=fopen(str,"r");

while(fp==NULL)

{ l++;

if(l==3)

{

printf("\n");

printf("\n");

printf("\n");

printf("\n");

printf("

************************************ \n");

printf(" * * \n");

printf(" * * \n");

printf(" * 请建立图文件后存盘保存

* \n");

printf(" * * \n");

printf(" * 选择新磁盘文件载入

* \n");

printf(" * * \n");

printf(" * * \n");

printf("

************************************ \n");

printf("\n");

printf("\n");

scanf("%*c");

exit(0);

}

printf(" 邻接表文件 %s 不存在!\n",str);

printf(" 输入邻接表文件名(可带路径) : ");

gets(str);

fp=fopen(str,"r");

}

fscanf(fp,"%d",&G->vex);

fscanf(fp,"%d",&G->arc);

for(i=1;i<=G->vex;i++) /* 构造顶点向量 */

{

fscanf(fp,"%s",G->ver[i].data);

G->ver[i].first=NULL; /* 初始化与该顶点有关的出弧链表 */

}

for(k=1;k<=G->arc;k++) /* 构造相关弧链表 */

{

fscanf(fp,"%s%s%d",va,vb,&w);

i=LocateVex1(*G,va); /* 起点,弧尾 */

j=LocateVex1(*G,vb); /* 终点,弧头 */

相关文档
最新文档