数据结构中图的两种存储结构和两种遍历_图的两种存储和遍历
数据结构中图的两种存储结构和两种遍历由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“图的两种存储和遍历”。
邻接矩阵
#include
#include
typedef struct
{
int a[20][20];
int n;
int e;
}Graph;
int visit[20];
void DFS(Graph *p,int n)
{
int i;
printf(“%4d”,n);
visit[n]=1;
for(i=1;in;i++)
if(i!=n&&visit[i]==0&&p->a[n][i])DFS(p,i);
}
void BFS(Graph *p,int n)
{
int i,top=0,t;
int a[20];
printf(“%4d”,n);
visit[n]=1;
a[++top]=n;
while(top)
{
t=a[1];
for(i=1;i
a[i]=a[i+1];
top--;
for(i=1;in;i++)
if(p->a[t][i]&&visit[i]==0){
printf(“%4d”,i);visit[i]=1;
a[++top]=i;
}
}
}
int main()
{
int i,j,n,m;
Graph *p;
p=(Graph *)malloc(sizeof(Graph));
printf(“输入图的顶点数:”);scanf(“%d”,&p->n);
printf(“输入图的边数:”);scanf(“%d”,&p->e);
for(i=1;in;i++)
for(j=1;jn;j++)
p->a[i][j]=0;
printf(“输入图的每条边:n”);
for(i=1;ie;i++)
{
printf(“%d:”,i);
scanf(“%d%d”,&n,&m);
p->a[n][m]=1;
p->a[m][n]=1;
}
for(i=1;in;i++)
{
for(j=1;jn;j++)
printf(“%4d”,p->a[i][j]);
printf(“n”);
}
for(i=1;in;i++)
visit[i]=0;
printf(“DFS遍历:n”);
DFS(p,1);
printf(“n”);
for(i=1;in;i++)
visit[i]=0;
printf(“BFS遍历:n”);
BFS(p,1);
printf(“n”);
return 0;
}
邻接表 #include
#include
typedef struct node
{
int n;
struct node *next;
}Node;
typedef struct
{
int m;
Node *a;
}PP;
PP a[30];
int n,e,visit[30];
void Create()
{
int i,x,y;
Node *p;
printf(“输入图的顶点数和边数:”);scanf(“%d%d”,&n,&e);
for(i=1;i
{
a[i].m=i;
a[i].a=new Node;
a[i].a->next=NULL;}
printf(“输入图的边数:n”);for(i=1;i
{
printf(“%d: ”,i);
scanf(“%d%d”,&x,&y);p=new Node;
p->n=y;
p->next=a[x].a->next;a[x].a->next=p;
p=new Node;
p->n=x;
p->next=a[y].a->next;
a[y].a->next=p;
}
}
void DFS(int n)
{
Node *p;
visit[n]=1;
printf(“%d ”,n);
for(p=a[n].a->next;p;p=p->next)
if(visit[p->n]==0)
DFS(p->n);
}
void BFS(int n)
{
int i;
int aa[20],top=0;
Node *p;
aa[++top]=n;
while(top)
{
p=a[aa[1]].a->next;
for(i=1;i
aa[i]=aa[i+1];
top--;
for(;p;p=p->next)
if(visit[p->n]==0)
{
printf(“%d ”,p->n);
visit[p->n]=1;
aa[++top]=p->n;
}
}
}
int main()
{
int i;
Node *p;
Create();
for(i=1;i
} /* 8 11 1 2 1 8 2 7 2 6 7 4 4 6 4 3 3 6 3 5 8 5 6 8 */
一、图的邻接矩阵存储1.存储表示#definevexnum10typedefstruct{vextypevexs[vexnum];intarcs[vexnum][vexnum];}mgraph;2.建立无向图的邻接矩阵算法voidcreat(mgraph*g, int......
向你推荐两种易学易用的议论文结构范维胜一、对立比照式结构:推荐理由:这种结构体现你思维的辩证性,展示你论证力度的深刻性。结构解剖:一见钟情的开篇—— 主 体对 立 比 照—......
求职信的两种结构按收信人的身分,求职信的结构可分为两种:1. 收信人是认识的 开首:建立共鸣:可回忆以往共事片段,或提及一、两件昔日趣事,让收信人记起你解释情况:既然大家曾相识,不......
议论文常用两种结构议论文论证,采取由浅入深,层层深入,步步推进的形式,即是纵式层进结构的体现,又称推进式结构。下面是小编为你带来的议论文常用两种结构,欢迎阅读。层层深入,步步......
刀豆文库小编为你整合推荐4篇两种结构的求职信,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......
