//<基于邻接矩阵的DFS算法:dfsm()> /*#include<stdio.h> #include<stdlib.h> #define MAX 100 bool mark[MAX];//标记数组 //定义邻接矩阵 typedef struct { int n,e; int vexs[MAX]; int edge[MAX][MAX]; }matrix_graph; matrix_graph *g=(matrix_graph *)malloc(sizeof(matrix_graph)) ; void dfsm(int i) { int j; mark[i]=1; for(j=0;j<g->n;j++) { if(g->edge[i][j]==1&&!mark[j]) { printf("%d ",j); dfsm(j); } } } //开始深度优先搜索 void DFS() { int i; for(i=0;i<g->n;i++) { if(!mark[i]) { printf("%d ",i); dfsm(i); puts(""); } } } //创建邻接矩阵 void create(matrix_graph *g) { int i,v,u; scanf("%d%d",&g->n,&g->e); for(i=0;i<g->e;i++) { scanf("%d%d",&v,&u); g->edge[u][v]=g->edge[v][u]=1; } } int main() { int i; //初始化 for(i=0;i<MAX;i++) mark[i]=0; create(g); DFS(); return 0; } */ //基于邻接表的DFS算法:dfsl() #include<stdio.h> #include<stdlib.h> #define MAX 100 bool mark[100];//标记数组 //定义边结点类型 typedef struct node { int adjver; struct node *next; }edgeNode; //定义顶点类型 typedef struct { int vertex; edgeNode *link; }vernode; //定义 图 typedef struct { int n,e; vernode adjlist[MAX]; }link_graph; link_graph *ga=(link_graph *)malloc(sizeof(link_graph)); void create(link_graph *ga) { int i,v,u; edgeNode *p; scanf("%d%d",&ga->n,&ga->e); for(i=0;i<ga->n;i++) { ga->adjlist[i].vertex=i; ga->adjlist[i].link=0; } for(i=0;i<ga->e;i++) { scanf("%d%d",&u,&v); p=(edgeNode *)malloc(sizeof(edgeNode)); p->adjver=u; p->next=ga->adjlist[v].link; ga->adjlist[v].link=p; p=(edgeNode *)malloc(sizeof(edgeNode)); p->adjver=v; p->next=ga->adjlist[u].link; ga->adjlist[u].link=p; } } void dfsl(int i) { int j; edgeNode *p; mark[i]=1; p=ga->adjlist[i].link; printf("%d ",ga->adjlist[i].vertex); while(p) { j=p->adjver; if(!mark[j]) dfsl(j); p=p->next; } } void DFS(link_graph *ga) { int i; for(i=0;i<ga->n;i++) { if(!mark[i]) { dfsl(i); puts(""); } } } int main() { int i; for(i=0;i<MAX;i++)mark[i]=0;//初始化 create(ga); DFS(ga); return 0; }