解题思路:
注意事项:
参考代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Scanner; import java.util.Stack; /** * @Author:杨雨彤 * @date:2024/1/9 20:42 */ public class Main { static BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); static int n; static int[][]matrix; static int[]spot; static boolean[]visited; public static void main(String[] args) throws IOException { n=Integer.parseInt(br.readLine()); matrix=new int[n][n]; visited=new boolean[n]; for (int i = 0; i < matrix.length; i++) { String[] s = br.readLine().split(" "); for (int j = 0; j <matrix[i].length; j++) { matrix[i][j]=Integer.parseInt(s[j]); } } DeepFristSearch(0); } public static void DeepFristSearch(int i){ spot=new int[n]; for (int j = 0; j <n ; j++) { spot[j]=j; } int j=i; do{ if(!visited[j]){ dfs(j,visited); } j=(j+1)%n;//查看其他连通分量 }while(j!=i); System.out.println(); } //递归实现深搜 private static void dfs(int i,boolean[]v){ v[i]=true; System.out.print(spot[i]+" "); for (int k = next(i,-1); k !=-1 ; k=next(i,k)) { if(!v[k]){ dfs(k,v); } } } //该方法用来求顶点i继j后的后继顶点 private static int next(int i,int j){ if(i!=j&&j>=-1&&i<n&&i>=0){ for (int k = j+1; k <n ; k++) { if(matrix[i][k]==1&&!visited[k]){//如果i,k之间有路且k顶点未被访问 return k;//返回k顶点 } } } return -1; } }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:463 |
回文数字 (C++代码)浏览:824 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1033 |
C二级辅导-计负均正 (C语言代码)浏览:594 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1053 |
C语言训练-最大数问题 (C语言代码)浏览:633 |
WU-printf基础练习2 (C++代码)浏览:2002 |
简单的a+b (C语言代码)浏览:812 |
DNA (C语言描述,蓝桥杯)浏览:1553 |
Minesweeper (C语言描述,蓝桥杯)浏览:1124 |