1. 程式人生 > >圖(圖的建立鄰接連結串列法)(圖的深度遍歷搜尋)

圖(圖的建立鄰接連結串列法)(圖的深度遍歷搜尋)

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
int visited[MAXSIZE]={0};
typedef struct node
{
int adjvex;
struct node* next;

}EdgeNode;

typedef struct vnode
{
int vertex;
EdgeNode* firstedge;
}VertexNode;

void creatAdjlist(VertexNode g[],int e,int n)//n為頂點數,e為邊數,g[]儲存n個定點表節點
{
EdgeNode* p;
int i,j,k,x;
printf(“Input date of vetex(0~n-1)\n”);
for(i=0;i<n;i++)
{
printf(“input \n”);
scanf("%d",&x);
g[i].vertex=x;
g[i].firstedge=NULL;
}
for(k=1;k<=e;k++)
{
printf(“input edge of(i,j)”);
scanf("%d%d",&i,&j);
p=(EdgeNode*)malloc(sizeof(EdgeNode));
p->adjvex=j;
p->next=g[i].firstedge;
g[i].firstedge=p;
p=(EdgeNode*)malloc(sizeof(EdgeNode));
p->adjvex=i;
p->next=g[i].firstedge;
g[j].firstedge=p;

}

}

void DFS(VertexNode g[],int i)//深度優先搜尋法
{
EdgeNode* p;
printf("%4d",g[i].vertex);
visited[i]=1;
p=g[i].firstedge;

while(p!=NULL)
{
    if(!visited[p->adjvex])
        DFS(g,p->adjvex);//對這個邊結點進行深度優先搜尋
    p=p->next;

}

}

int main()
{
VertexNode g[4];
creatAdjlist(g,4,4);
DFS(g,1);

return 0;

}