输入数据:
0 1 2 3 4
1 3 4 -1
0 2 -1
1 -1
0 4 -1
0 3 -1
程序:
#include<stdio.h>
#include<stdlib.h>
FILE * in=fopen("C:\\input.txt","r");
bool visited[5];
struct ArcNode{
int adj;
ArcNode * next;
};
struct VNode{
int data;
ArcNode * first;
};
void create(int n,VNode g[]){
int e,i;
for(i=0;i<n;i++)
visited[i]=false;
ArcNode * p,* q;
for(i=0;i<n;i++){
fscanf(in,"%d",&g[i].data);
printf("g[%d].data: %d\n",i,g[i].data);
g[i].first=NULL;
}
for(i=0;i<n;i++){
printf("g[%d].adj:\n",i);
fscanf(in,"%d",&e);
while(e!=-1){
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adj=e;
p->next=NULL;
if(g[i].first==NULL)
g[i].first=p;
else
q->next=p;
q=p;
printf("%d ",p->adj);
fscanf(in,"%d",&e);
printf("\n");
}
}
};
int firstadj(VNode g[],int v){
if(g[v].first!=NULL)
return (g[v].first)->adj;
else
return -1;
};
int nextadj(VNode g[],int v){
ArcNode * p=g[v].first;
while(p){
if(visited[p->adj])
p=p->next;
else
return p->adj;
}
return -1;
};
void DFS(VNode g[],int v){
visited[v]=true;
printf("%d\n",g[v].data);
int w=firstadj(g,v);
while(w!=-1){
if(!visited[w])
DFS(g,w);
w=nextadj(g,v);
}
};
int main(){
VNode g[5];
create(5,g);
printf("\n\ndepth first search the graph from 0:\n\n");
DFS(g,0);
return 0;
}