#include<stdio.h> #include<string.h> /*邻接矩阵*/ int a[4][4]={{0,0,1,0},{0,0,1,0},{1,1,0,1},{0,0,1,0}}; int visit[4]={0}; /*得到第一个与之相连的节点*/ int getfirst(int k) { int i; for(i=0;i<4;i++) if(a[k][i]!=0) break; //找到与k第一个与k相连的节点 if(i==4) return -1; else return i; } /*的到下一个节点*/ int getnext(int i,int j) { int k; for( k=j+1;k<4;k++) //得到与i相连的下一个节点 { if(a[i][k]==1) break; } if(k==4) return -1; else return k; } /*深度优先遍历所有点*/ void dfs(int k) { int w; printf("%d ",k); visit[k]=1; //第k节点已经遍历过,记录在visit数组中 w=getfirst(k); //找到第一个与之相连的节点w while(w!=-1) { if(visit[w]==0) //记录w节点已经被遍历过 dfs(w); //递归 w=getnext(k,w); //得到下一个节点 } } int main() { dfs(0); return 0; }
输出结果0,2,1,3