日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

王彪-20162321《程序设计与数据结构2nd》-第十一周学习总结与实验报告

發布時間:2025/3/15 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 王彪-20162321《程序设计与数据结构2nd》-第十一周学习总结与实验报告 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鄰接矩陣實現

例圖

分析

變量

  • 需要一個鏈表來保存數據-即保存結點
  • 需要一個二維數組來保存每個變得權值,有則填入具體數值,沒有則用0
  • 定義一個保存邊個數的值

函數方法

  • 得到圖中邊的個數
  • 得到結點的數據
  • 得到具體邊的權值
  • 插入結點,刪除節點
  • 插入邊,刪除邊
  • isEmpty,size
  • 廣度優先遍歷,深度優先遍歷

具體實踐

  • 插入,刪除結點與邊
    我認為鄰接矩陣的變換是根據結點來變化的。所以我先定義了構造函數它傳入參數n,作為初始值,用來幫助實例化結點鏈表和二維數組。
public AMgroup (int n){edges = new int [n][n];myList = new ArrayList<>(n);NumEdges = 0;room = n;}

插入結點并不改變二維數組本身,除非插入的結點個數大于初始參數n;但刪除結點時就不得不考慮由于結點remove導致二維數組中該節點參與的橫和列都不能填入值,0也不可以,應該移除此橫和列,重新定義新的數組。

public void helpRemoveEdges(T item){int position = myList.indexOf(item);int[][] Newedge = new int[room-1][room-1];for (int i=0;i<room;i++){if (i==position){continue;}if (i<position){for (int j=0;j<room;j++){if (j==position)continue;if (j<position)Newedge[i][j]=edges[i][j];if (j>position)Newedge[i][j-1]=edges[i][j];}}if (i>position){for (int j=0;j<room;j++){if (j==position)continue;if (j<position)Newedge[i-1][j]=edges[i][j];if (j>position)Newedge[i-1][j-1]=edges[i][j];}}}edges = Newedge;}
  • 插入刪除的具體代碼
public void insertEdge(int x,int y,int weight){edges[x][y]=weight;NumEdges++;}public void removeEdge(int x,int y){edges[x][y]=0;NumEdges--;}public void insertNode(T item){myList.add(item);}public void removeNode(T item){helpRemoveEdges(item);myList.remove(item);}
  • 深度優先遍歷

    1.訪問初始結點v,并標記結點v為已訪問。
    2.查找結點v的第一個鄰接結點w。
    3.若w存在,則繼續執行4,否則算法結束。
    4.若w未被訪問,對w進行深度優先遍歷遞歸(即把w當做另一個v,然后進行步驟123)。
    5.查找結點v的w鄰接結點的下一個鄰接結點,轉到步驟3

轉載于:https://www.cnblogs.com/wbiao21/p/7859855.html

總結

以上是生活随笔為你收集整理的王彪-20162321《程序设计与数据结构2nd》-第十一周学习总结与实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。