1.DFS (Depth First Search) 深度优先搜索
其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次

//表结点struct ArcNode {int adfvex;//表示该边的另外一个顶点在顶点表中的下标ArcNode * next; //表示依附在该顶点的下一条边的信息};//头结点struct Vnode {string data; //记录基本信息iArcNode * firstarc;//记录第一条依附在该顶点的边};//一个图的结构struct Graph_List {int vexnum; //图的顶点数int edge; //图的边数Vnode * node; //邻接表};//DFS遍历图void DFS_store_list(Graph_List g, int v, bool * & visit) {cout << g.node[v].data << " ";visit[v] = true;ArcNode * next = g.node[v].firstarc;while (next) {if (!visit[next->adfvex]) {DFS_store_list(g, next->adfvex, visit);//递归}else {next = next->next;}}}void DFS_list(Graph_List g, int begin) {int i;bool * visit = new bool[g.vexnum];for (i = 0; i < g.vexnum; i++) {visit[i] = false;}DFS_store_list(g, 0, visit);for (i = 1; i < g.vexnum; i++) {if(!visit[i])DFS_store_list(g, i, visit);}}
2.BFS (Breadth First Search) 广度优先搜索
1任意点v出发=>访问v ->访问v的邻接点
2.v的邻接点出发 ->访问v的邻接点的邻接点
“先被访问的顶点的邻接点”先于”后被访问的邻接点”访问,直至图中所有的顶点都被访问到为止

//表结点struct ArcNode {int adfvex;//表示该边的另外一个顶点在顶点表中的下标ArcNode * next; //表示依附在该顶点的下一条边的信息};//头结点struct Vnode {string data; //记录基本信息iArcNode * firstarc;//记录第一条依附在该顶点的边};//一个图的结构struct Graph_List {int vexnum; //图的顶点数int edge; //图的边数Vnode * node; //邻接表};//BFS遍历图void BFS_list(Graph_List g, int begin) {int i;bool * visit = new bool[g.vexnum];for (i = 0; i < g.vexnum; i++) {visit[i] = false;}queue<int> q;for (int v = 0; v < g.vexnum; v++) {if (!visit[(begin + v) % g.vexnum]){cout << g.node[(begin - 1 + v) % g.vexnum].data << " ";visit[(begin + v) % g.vexnum] = true;q.push((begin + v) % g.vexnum);//初始化队列while (!q.empty()){int u = q.front();q.pop();ArcNode * next;next = g.node[u].firstarc;//获得依附在该顶点的第一条边的信息while (next) {//遍历该链表上的所有的点if (!visit[next->adfvex]) {cout << g.node[next->adfvex].data << " ";visit[next->adfvex] = true;q.push(next->adfvex);}next = next->next;}}}}}
