解题思路:
注意事项:
参考代码:
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 人评分
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1266 |
剪刀石头布 (C语言代码)浏览:1792 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:585 |
出圈】指针malloc版浏览:377 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:689 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:497 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:653 |
矩阵的对角线之和 (C语言代码)浏览:1401 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:505 |
孤独的骑士 (C语言代码)浏览:1416 |