日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 王彪-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》-第十一周学习总结与实验报告的全部內容,希望文章能夠幫你解決所遇到的問題。

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