数据结构图的建立和应用代码
return s;
}
void guangdu(ALGraph *a,int v)//广度遍历
{
ArcNode *p;
int queue[MAXV];
int visited[MAXV];
int f=0,r=0,x,i;
for (i=0;i<a->n;i++)
{
visited[i]=0;
}
printf("%c ",a->adjlist[v-1].data);
printf("--------------------------\n");
printf("*1.邻接矩阵建图\n");
printf("*2.邻接表建图\n");
printf("*3.邻接表图的广度遍历\n");
printf("*4.结束·····\n");
printf("--------------------------\n");
{
int i,j;
ArcNode *q;
printf("这是所建立的图:\n");
for (i=0;i<a->n;i++)
{
printf("%c ",a->adjlist[i].data);
printf("-->");
q=a->adjlist[i].firstarc;
for (j=0;j<a->n;j++)
ALGraph *a;
a=(ALGraph *)malloc(sizeof (ALGraph));
while (flag)
{
jiemian();//选择界面
scanf("%d",&c);
getchar();
switch (c)
{
case 1:
creategraph1();//邻接矩阵
flag=FLAG();
for (j=1;j<=m->arcnum;j++)
{
printf("请输入第%d条边相连的两个顶点:\n",m->vexs[j].no);
scanf("%d,%d",&a,&b);
m->edges[a-1][b-1]=1;
}
system("CLS");
shuchu1(m);
}
void shuchu2(ALGraph *a)//输出邻接表
break;
case 2:
creategraph2(a);//邻接表
flag=FLAG();
break;
case 3:
printf("这里是图的广度遍历:\n");
printf("请输入遍历的起始顶点序号:\n");
scanf("%d",&v);
guangdu(a,v);
break;
default:
printf("%c ",a->adjlist[p->adjvex].data);
r=(r+1)%MAXV;
queue[r]=p->adjvex;
}
p=p->nextarc;
}
}
printf("\n");
getch();
system("CLS");
}
void main()
{
int flag=1,c,v,i;
{
printf(" %d ",m->edges[i][j]);
}
if (j=m->vexnum)//换行判断
printf("\n");
}
}
void creategraph1()//创建邻接矩阵
{
int i,j,a,b;
MGraph *m;
m=(MGraph *)malloc(sizeof (MGraph));
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAXV 100
typedef char ElemType;
typedef struct ANode/*弧的结点结构类型*/
{
int adjvex; /*该弧的终点位置*/
struct ANode *nextarc;/*指向下一条弧的指针*/
flag=0;
break;
}
if (flag==0)
{
printf("您已经成功退出!下次再会!\n");
exit(0);
}
}
}
getchar();
scanf("%c",&a->adjlist[i-1].data);
}
printf("\n");
printf("请输入图的边数:\n");//输入边
scanf("%d",&a->e);
printf("请输入各条边相连的两个顶点,例如:a->b,a为第一个顶点,b为第二个;输入:1,2\n");
p->adjvex=d-1;
p->nextarc=a->adjlist[c-1].firstarc;
a->adjlist[c-1].firstarc=p;
p=(ArcNode *)malloc(sizeof (ArcNode));//b到a
p->adjvex=c-1;
p->nextarc=a->adjlist[d-1].firstarc;
printf("温馨提示:为了让您使用愉快,请按提示操作!\n");
printf("请选择:");
}
void shuchu1(MGraph *m)//输出邻接矩阵
{
int i,j;
printf("邻接矩阵为:\n");
for (i=0;i<m->vexnum;i++)
{
for (j=0;j<m->vexnum;j++)
{
AdjList adjlist;/*邻接表*/
int n,e;/*图中顶点数n和边数e*/
} ALGraph;/*图的类型*/
typedef struct
{
int no;/*顶点编号*/
ElemType data;/*顶点其他信息*/
} VertexType;/*顶点类型*/
typedef struct/*图的定义*/
for (j=1;j<=a->e;j++)
{
printf("请输入第%d条边相连的两个顶点:\n",j);
scanf("%d,%d",&c,&d);
if (c<1||d<1 || c>a->n || d>a->n)
{
printf("输入有误!\n");
continue;
}
p=(ArcNode *)malloc(sizeof (ArcNode));//a到b
{
printf("请输入第%d个顶点:\n",i);
scanf("%c",&m->vexs[i-1].data);
getchar();
m->vexs[i].no=i;
}
printf("\n");
printf("请输入图的边数:\n");//输入边
scanf("%d",&m->arcnum);
printf("请输入边相连的两个顶点,逗号隔开,例如:a->b,输入为:1,2\n");
{
int edges[MAXV][MAXV];/*邻接矩阵*/
int vexnum,arcnum;/*顶点数,弧数*/
VertexType vexs[MAXV];/*存放顶点信息*/
} MGraph;
void jiemian()//界面函数
{
printf("***无向图的建立及其应用***\n");
printf("这里是用邻接矩阵建图:\n");
printf("请输入图的顶点数:\n");
scanf("%d",&m->vexnum);
for (i=0;i<m->vexnum;i++)//邻接矩阵置零
{Hale Waihona Puke for (j=0;j<m->vexnum;j++)
{
m->edges[i][j]=0;
}
}
for (i=1;i<=m->vexnum;i++)//输入顶点
printf("这是用邻接表建图:\n");
printf("请输入图的顶点数:\n");
scanf("%d",&a->n);