网站 服务器 域名,建设论坛网站需要做什么的,做网站开发工具哪个好,长沙教育建设信息网站基本思路就是#xff1a;构造一个列表这个列表的每个元素是一个列表#xff0c;private ListListInteger arrList;然后就是为arrList添加列表#xff0c;和顶点数相同#xff0c;一定要注意的是不能光写一个for循环#xff0c;for (int i1;itotal;i){…基本思路就是构造一个列表这个列表的每个元素是一个列表private ListListInteger arrList;然后就是为arrList添加列表和顶点数相同一定要注意的是不能光写一个for循环for (int i1;itotal;i){ arrList.add(new ArrayList()); }要这样写如下图在这个构造方法中for循环之前一定要多一步arrList.add(new ArrayList());因为你循环为每个节点加列表的时候arrList.add默认会从尾部加也就是说我想跳过arrList[0]只加到索引1~5是不可能的系统会默认从索引0开始加所以只用for循环加列表实际上是从arrList的索引为0开始加加到索引为4最后一个索引5不会拥有一个列表因此程序会报错。public youGraphDfs2(int total){ this.totaltotal; this.arrListnew ArrayList(total1); //total 1 arrList.add(new ArrayList()); for (int i1;itotal;i){ arrList.add(new ArrayList()); } }接着就是添加边邻接表法构造有向图就是arrList中的每个元素代表一个顶点顶点又是一个列表每个顶点的列表存储顶点的邻居顶点又因为是有向图不需要双向添加只需要添加一次即可然后再进行深度优先遍历。public void addEdge(int i,int j){ arrList.get(i).add(j); //添加用list操作方法get和add }深度优先遍历有两个方法两个方法的本质是一样的都是递归遍历其二是封装调用函数。其一public void dfs(int start,boolean[] visit){ visit[start]true; System.out.print(Vstart ); //邻接表深度优先是队列形式 for(int neighbor:arrList.get(start)){ if(!visit[neighbor]){ dfs(neighbor,visit); } }其二public void dfs(int start){ boolean[] visitnew boolean[total1]; dfsUtil(start,visit); } public void dfsUtil(int i,boolean[] visit){ visit[i]true; System.out.print(Vi ); //遍历它所有的邻居节点,就是不断的先遍历第一个列表找到每一个的邻居 for(int neighbor:arrList.get(i)){ if(!visit[neighbor]){ dfsUtil(neighbor,visit); } }完整代码展示package 算法; import java.util.ArrayList; import java.util.List; public class youGraphDfs2 { //链表法写 private int total; private ListListInteger arrList; public youGraphDfs2(int total){ this.totaltotal; this.arrListnew ArrayList(total1); //total 1 arrList.add(new ArrayList()); for (int i1;itotal;i){ arrList.add(new ArrayList()); } } public void addEdge(int i,int j){ arrList.get(i).add(j); //添加用list操作方法get和add } public void dfs(int start,boolean[] visit){ visit[start]true; System.out.print(Vstart ); //邻接表深度优先是队列形式 for(int neighbor:arrList.get(start)){ if(!visit[neighbor]){ dfs(neighbor,visit); } } // public void dfs(int start){ // boolean[] visitnew boolean[total1]; // dfsUtil(start,visit); // } // public void dfsUtil(int i,boolean[] visit){ // visit[i]true; // System.out.print(Vi ); // //遍历它所有的邻居节点,就是不断的先遍历第一个列表找到每一个的邻居 //// for(int j1;jtotal;j){ //// if(arrList.get(i).get()) //// } // //for // for(int neighbor:arrList.get(i)){ // if(!visit[neighbor]){ // dfsUtil(neighbor,visit); // } // } // } public static void main(String[] args) { youGraphDfs2 ynew youGraphDfs2(5); y.addEdge(1, 2); y.addEdge(1, 4); y.addEdge(4, 3); y.addEdge(3, 2); y.addEdge(3, 5); y.addEdge(2, 5); boolean[] visitnew boolean[y.total1]; y.dfs(1,visit); } }