#include "stdlib.h"
#define N 30
typedef struct node
{
int vno;
struct node *next;
} edgenode;
typedef edgenode* Graph[N];
int createlist(Graph g);
void DfsTravel(Graph g,int vn);
void Dfs(Graph g,int i);
void Bfs(Graph g,int s,int vn);
int visited[N];
main()
{
Graph g;
int vn;
vn= createlist(g) ;
DfsTravel(g,vn);
Bfs(g,3,vn);
}
void Dfs(Graph g,int i)
{
edgenode *t;
/*访问该节点*/
printf("%4d",i);
/*设置访问标志*/
visited[i]=1;
t=g[i];
/*访问该节点的边信息*/
while(t)
{
if(!visited[t->vno])
/*未访问则调用Dfs遍历该节点*/
Dfs(g,t->vno);
t=t->next;
}
}
void DfsTravel(Graph g,int vn)
{
int i,j;
for(j=0;j<vn;j++)
visited[j]=0;
printf("please input start vertex/n");
scanf("%d",&i);
Dfs(g,i);
for(i=0;i<vn;i++)
{
if(!visited[i])
Dfs(g,i);
}
}
void Bfs(Graph g,int s,int vn)
{
int queue[N];
int i;
int front,rear;
edgenode *p;
for(i=0;i<vn;i++)
visited[i]=0;
front=rear=0;
visited[s]=1;
printf("%4d",s);
queue[rear]=s;
rear=(rear+1)%N;
while(front!=rear)
{
s=queue[front];
front=(front+1)%N;
p=g[s];
while(p)
{
if(visited[p->vno]==0)
{
printf("%4d",p->vno);
visited[p->vno]=1;
queue[rear]=p->vno;
rear=(rear+1)%N;
}
p=p->next;
}
}
}
int createlist(Graph g)
/*创建图的邻接表*/
{
int vn,en,i,j,k;
edgenode *p;
printf("please input vn/n");
scanf("%d",&vn);
printf("please input en/n");
scanf("%d",&en);
for( k=0;k<vn;k++)
{
g[k]=NULL;
}
printf("please input the edges/n");
for(k=0;k<en;k++)
{
scanf("%d,%d",&i,&j);
p=(edgenode *)malloc(sizeof(edgenode));
p->vno=i;
p->next=g[j];
g[j]=p;
p=(edgenode *)malloc(sizeof(edgenode));
p->vno=j;
p->next=g[i];
g[i]=p;
}
return vn;
}