您的位置:首页 > 其它

邻接表的创建与深搜

2015-11-29 21:58 190 查看
#include<stdio.h>

#include<stdlib.h>

#define MAX 20 //最多顶点个数

typedef struct Arc

{

int adjvex;

Arc *next;

int other;

}Arc;

int visited[MAX];

typedef struct Node

{

char date;

Arc *firstarc;

}Node;

typedef struct Adj

{

Node vertex[MAX];

int vexnum,arcnum;

}Adj;

int locat(Adj *G,char v)

{

int j=0,k;

for(k=1;k<=G->vexnum;k++)

{

if(v==G->vertex[k].date)

{

j=k;

break;

}

}

return j;

}

void creat(Adj *G)

{

Arc *p;

int i,j,k;

char v1,v2;

printf("请输入顶点数和边数:");

scanf("%d%d",&G->vexnum,&G->arcnum);

for(i=1;i<=G->vexnum;i++)

{

printf("请输入图中的顶点");

getchar();

G->vertex[i].date=getchar();

G->vertex[i].firstarc=NULL;

}

for(k=1;k<=G->arcnum;k++)

{

getchar();

printf("请输入两个顶点:");

scanf("%c,%c,%d",&v1,&v2);

i=locat(G,v1);

j=locat(G,v2);

p=(Arc *)malloc(sizeof(Arc));

p->adjvex=j;

p->next=G->vertex[i].firstarc;

G->vertex[i].firstarc=p;

p=(Arc *)malloc(sizeof(Arc));// 如果输出有向图此段程序不要

p->adjvex=i;

p->next=G->vertex[j].firstarc;

G->vertex[j].firstarc=p;//不要的程序到此

}

}

void DepthFirstSearch(Adj *G,int v0)

{

Arc *p;

printf("%c,",G->vertex[v0].date);

visited[v0]=1;

p=G->vertex[v0].firstarc;

while(p!=NULL)

{

if(!visited[p->adjvex])

{

DepthFirstSearch(G,p->adjvex);

}

p=p->next;

}

}

void Trave(Adj *G)

{

int vi;

for(vi=1;vi<=G->vexnum;vi++)

visited[vi]=0;

for(vi=1;vi<=G->vexnum;vi++)

{

if(!visited[vi])

DepthFirstSearch(G,vi);

}

}

int main()

{

Adj *G=(Adj *)malloc(sizeof(Adj));

creat(G);

Trave(G);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: