找环dfs

    xiaoxiao2021-03-25  100

    

    package xj;

    import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner;

    public class FindRing1 {  static int T,D, B;  static int map[][];  static boolean a[];  static boolean b[];  static int res[];  static int tail;  static boolean flag;

     public static void main(String[] args) throws FileNotFoundException {   /* Scanner sc=new Scanner(System.in); */   Scanner sc = new Scanner(new File("src/FingRing1"));   while (sc.hasNext()) {    D = sc.nextInt();    B = sc.nextInt();    map = new int[D + 1][D + 1];    a = new boolean[D + 1];    b = new boolean[D + 1];    flag = false;    for (int i = 0; i < B; i++) {     int m = sc.nextInt();     int n = sc.nextInt();     map[m][n] = 1;     a[m] = true;     b[n] = true;    }    T++;    for (int i = 1; i < D+1; i++) {     if(flag){break;}     if(a[i]&&b[i]){      res=new int[D+1];//记得初始化要写在这里      tail=1;      res[0]=i;      dfs(1,i);     }    }    if(flag){     System.out.print("#"+T);     for (int i = 0; i < tail-1; i++) {      System.out.print(" "+res[i]);     }     System.out.println();    }    else{System.out.println("#"+T+" "+"No Ring");}   }  }

     private static void dfs(int step, int p) {   if(step>D){return;}   if(tail!=1&&res[tail-1]==res[0]){flag=true;return;}   for (int i = 1; i < D+1; i++) {   if(map[p][i]==1&&a[i]){    res[tail]=i;    tail++;    dfs(step+1,i);    if(flag){return;}//记得判断    tail--;    res[tail]=0;   }   }  }

    }

    转载请注明原文地址: https://ju.6miu.com/read-18432.html

    最新回复(0)