課程:程序設計與數據結構
班級: 1623
姓名: 石亞鑫
學號:20162303javascript
成績: 2分
指導教師:婁嘉鵬 王志強
實驗日期:11月20日java
實驗密級: 非密級
預習程度: 已預習
實驗時間:15:25-17:15數組
必修/選修: 必修
實驗序號: cs_03網絡
鄰接矩陣 邏輯結構分爲兩部分:V和E集合。所以,用一個一維數組存放圖中全部頂點數據;用一個二維數組存放頂點間關係(邊或弧)的數據,這個二維數組稱爲鄰接矩陣。
//添加結點 public void insertVertex(Object vertex) { vertexList.add(vertexList.size(),vertex); } //添加邊 public void insertEdge(int v1,int v2,int weight) { edges[v1][v2]=weight; numOfEdges++; } //刪除結點 public void deleteEdge(int v1,int v2) { edges[v1][v2]=0; numOfEdges--; }
//獲得頂點的數目 public int getVertsCount() { return nVerts; } //獲得邊的數目 public int getNumOfEdges() { return nVerts; } public boolean isEmpty() { if ( vertexList.size()== 0) return true; else return false; }
//私有函數,深度優先遍歷 private void depthFirstSearch(boolean[] isVisited,int i) { //首先訪問該結點,在控制檯打印出來 System.out.print(getValueByIndex(i)+" "); //置該結點爲已訪問 isVisited[i]=true; int w=getFirstNeighbor(i);// while (w!=-1) { if (!isVisited[w]) { depthFirstSearch(isVisited,w); } w=getNextNeighbor(i, w); } } //私有函數,廣度優先遍歷 private void broadFirstSearch(boolean[] isVisited,int i) { int u,w; LinkedList queue=new LinkedList(); //訪問結點i System.out.print(getValueByIndex(i)+" "); isVisited[i]=true; //結點入隊列 queue.addLast(i); while (!queue.isEmpty()) { u=((Integer)queue.removeFirst()).intValue(); w=getFirstNeighbor(u); while(w!=-1) { if(!isVisited[w]) { //訪問該結點 System.out.print(getValueByIndex(w)+" "); //標記已被訪問 isVisited[w]=true; //入隊列 queue.addLast(w); } //尋找下一個鄰接結點 w=getNextNeighbor(u, w); } }
十字鏈表 鄰接表,存儲方法跟樹的孩子鏈表示法相相似,是一種順序分配和鏈式分配相結合的存儲結構。如這個表頭結點所對應的頂點存在相鄰頂點,則把相鄰頂點依次存放於表頭結點所指向的單向鏈表中。
//添加結點 public void addVertex(Vertex vertex) { vertex.setIndex(nVerts); vertexList.add(vertex); nVerts++; } //添加邊 public void addEdge(int start, int end) { vertexList.get(start).addAdj(vertexList.get(end)); if (!isDirected) { vertexList.get(end).addAdj(vertexList.get(start)); } } //刪除邊 public void deleteEdge(int start, int end) { vertexList.get(start).addAdj(vertexList.get(end)); if (!isDirected) { vertexList.get(end).addAdj(vertexList.get(start)); }}
//獲得頂點的個數 public int getNumOfVertex() { return vertexList.size(); } //獲得邊的數目 public int getNumOfEdges() { return numOfEdges; } public boolean isEmpty() { if ( numOfEdges== 0) return true; else return false; }
// 深度優先遍歷 public void dfs() { theStack = new StackX(nVerts); vertexList.get(0).wasVisted = true; dfs.add(vertexList.get(0)); theStack.push(vertexList.get(0)); Vertex vertex; while (!theStack.isEmpty()) { vertex = getAdjVertex((Vertex) theStack.peek()); if (vertex == null) { theStack.pop(); } else { vertex.wasVisted = true; dfs.add(vertex); theStack.push(vertex); } } } // 廣度優先遍歷 public void bfs() { theQueue = new Queue(nVerts); vertexList.get(0).wasVisted = true; bfs.add(vertexList.get(0)); theQueue.insert(vertexList.get(0)); Vertex vertex1; while (!theQueue.isEmpty()) { Vertex vertex2 = (Vertex) theQueue.remove(); while ((vertex1 = getAdjVertex(vertex2)) != null) { vertex1.wasVisted = true; bfs.add(vertex1); theQueue.insert(vertex1); } } }
建立計算機網絡路由系統 輸入網路中點到點的線路 以及每條線路使用的費用 系統輸出網絡中各點之間最便宜的路徑 指出不相同的全部位置
根據個人見解,就是求出有權圖的最短路徑。數據結構
步驟 | 耗時 | 百分比 |
---|---|---|
需求分析 | 60min | 13.6% |
代碼實現 | 300min | 68.1% |
測試 | 60min | 13.6% |
分析總結 | 20min | 4.5% |