图的遍历--深度优先遍历

package com.xjj.Ah;

import java.util.Scanner;

/*----图的遍历--深度优先遍历----
 * 1. 深度优先遍历:首先从一个未走过的顶点作为起点,沿着该点去尝试访问其他未访问的点...
 * 				 在以该点作为新的起点,继续访问其他顶点...
 *  
 * 3.基本模型
 * 			void dfs(int start)
 * 			{
 * 				标记该点
 * 				如果所有点访问完返回(return)
 * 				访问所有点
 * 				for(int i = 1; i <= n; i++)
 * 				{
 * 					判断(if)是否符合要求;
 * 						继续下一步  dfs(step+1);
 *  			}
 *  			返回(return)
 *  		}
 * */
public class Ah_5_1 {
	static int N = 0, M = 0;				//点,边		行坐标代表该点,列坐标代表其对其他点
	static int[][]	a = new int[51][51];	//保存图,点边集
	static int[] book = new int[51];		//因为只涉及到点就行,故一维数组
	static int sum = 0;
	public void dfs(int start){
		sum++;
		book[start] = 1;
		System.out.print(start + " ");
		if (sum == N) {						//所有定点访问完
			return;
		}
		
		for(int i = 1; i <= N; i++){
			//该两点间有路径且未被访问
			if (a[start][i] == 1 && book[i] == 0) {
				dfs(i);						//深度下一顶点
			}
		}
		return;								//该点对其余点都访问了就返回上一定点
	}

	public static void main(String[] args) {
		System.out.println("输入图的顶点数及边数:");
		Scanner scanner = new Scanner(System.in);
		N = scanner.nextInt();
		M = scanner.nextInt();
		
		for(int i = 1; i <= M; i++){
			int x = scanner.nextInt();
			int y = scanner.nextInt();
			a[x][y] = 1;
			a[y][x] = 1;
		}
		Ah_5_1 ah = new Ah_5_1();
		ah.dfs(1);

	}

}

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/jiejiexiao/article/details/79205138
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞