解题思路:
注意事项:
参考代码:
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语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复