import java.io.File;
import java.util.Queue;
import java.util.Scanner;
public class Gdfs {
private int vNum;
private int arcNum;
private int counter=1;
private int arc[][];
private int pre[],post[];
boolean[] visited;
public GraphDFS(int vNum,int arcNum){
this.vNum=vNum;
this.arcNum=arcNum;
this.arc=new int[vNum][arcNum];
visited=new boolean[vNum];
pre=new int[vNum];
post=new int[vNum];
}
public int[][] getArc(){
return arc;
}
public void addEdage(int v1,int v2){
arc[v1][v2]=1;
arc[v2][v1]=1;
}
public static void main(String[] args) {
String path="src/tinyG.txt";
try{
Scanner scanner=new Scanner(new File(path));
int vNum= scanner.nextInt();
int arcNum=scanner.nextInt();
GraphDFS g=new GraphDFS(vNum, arcNum);
for(int i=0;i<arcNum;i++){
int v1=scanner.nextInt();
int v2=scanner.nextInt();
g.addEdage(v1, v2);
}
g.DFSTraverse();
for(int i=0;i<vNum;i++){
System.out.println("顶点:"+i+" pre:"+g.pre(i)+",post:"+g.post(i));
}
}catch (Exception e) {
e.printStackTrace();
}
}
public void DFSTraverse(){
for(int i=0;i<vNum;i++){
visited[i]=false;
}
System.out.println("深度优先遍历的结果是:");
int j=1;//第几个连通分量的序号
for(int i=0;i<vNum;i++){//选取某个特定的点开始深度优先搜索
if(!visited[i]){
System.out.println("第"+(j++)+"个连通分量:");
dfs(i);
System.out.println();
}
}
}
public int pre(int v){
return pre[v];
}
public int post(int v){
return post[v];
}
public void dfs(int i){
visited[i]=true;
System.out.print(i+" ");
pre[i]=counter++;
for(int j=0;j<vNum;j++){
if(arc[i][j]==1&&!visited[j]){
dfs(j);
}
}
post[i]=counter++;
}
}
import java.util.Queue;
import java.util.Scanner;
public class Gdfs {
private int vNum;
private int arcNum;
private int counter=1;
private int arc[][];
private int pre[],post[];
boolean[] visited;
public GraphDFS(int vNum,int arcNum){
this.vNum=vNum;
this.arcNum=arcNum;
this.arc=new int[vNum][arcNum];
visited=new boolean[vNum];
pre=new int[vNum];
post=new int[vNum];
}
public int[][] getArc(){
return arc;
}
public void addEdage(int v1,int v2){
arc[v1][v2]=1;
arc[v2][v1]=1;
}
public static void main(String[] args) {
String path="src/tinyG.txt";
try{
Scanner scanner=new Scanner(new File(path));
int vNum= scanner.nextInt();
int arcNum=scanner.nextInt();
GraphDFS g=new GraphDFS(vNum, arcNum);
for(int i=0;i<arcNum;i++){
int v1=scanner.nextInt();
int v2=scanner.nextInt();
g.addEdage(v1, v2);
}
g.DFSTraverse();
for(int i=0;i<vNum;i++){
System.out.println("顶点:"+i+" pre:"+g.pre(i)+",post:"+g.post(i));
}
}catch (Exception e) {
e.printStackTrace();
}
}
public void DFSTraverse(){
for(int i=0;i<vNum;i++){
visited[i]=false;
}
System.out.println("深度优先遍历的结果是:");
int j=1;//第几个连通分量的序号
for(int i=0;i<vNum;i++){//选取某个特定的点开始深度优先搜索
if(!visited[i]){
System.out.println("第"+(j++)+"个连通分量:");
dfs(i);
System.out.println();
}
}
}
public int pre(int v){
return pre[v];
}
public int post(int v){
return post[v];
}
public void dfs(int i){
visited[i]=true;
System.out.print(i+" ");
pre[i]=counter++;
for(int j=0;j<vNum;j++){
if(arc[i][j]==1&&!visited[j]){
dfs(j);
}
}
post[i]=counter++;
}
}