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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图的邻接表存储结构

發(fā)布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图的邻接表存储结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

程序調(diào)用入口

using System;namespace Graphic_AdjacencyList {internal class Program{private static void Main(string[] args){var adjacencyList = new AdjacencyList<char>();Console.WriteLine("1.初始化樹結(jié)構(gòu):");Console.WriteLine("=================================");//添加頂點(diǎn);adjacencyList.AddVertex('A');adjacencyList.AddVertex('B');adjacencyList.AddVertex('C');adjacencyList.AddVertex('D');//添加邊;adjacencyList.AddEdge('A', 'B');adjacencyList.AddEdge('A', 'C');adjacencyList.AddEdge('A', 'D');adjacencyList.AddEdge('B', 'D');adjacencyList.AddEdge('C', 'D');Console.WriteLine("=================================");Console.WriteLine("2.樹的鄰接表遍歷:");Console.WriteLine(adjacencyList.ToString());Console.Read();}} }圖-頂點(diǎn)類

namespace Graphic_AdjacencyList {/// <summary>/// 鏈表中的節(jié)點(diǎn)/// </summary>public class Node<T>{/// <summary>/// 鄰接點(diǎn)域/// </summary>public Vertex<T> Adjvex;/// <summary>/// 下一個鄰接點(diǎn)指針域/// </summary>public Node<T> Next;/// <summary>/// 鏈表中的節(jié)點(diǎn)/// </summary>/// <param name="value"></param>public Node(Vertex<T> value){Adjvex = value;}} }圖-鏈表中的表頭節(jié)點(diǎn)類:

using System;namespace Graphic_AdjacencyList {/// <summary>/// 鏈表中的表頭節(jié)點(diǎn)/// </summary>/// <typeparam name="T"></typeparam>public class Vertex<T>{/// <summary>/// 數(shù)據(jù)/// </summary>public T Data;/// <summary>/// 鄰接表表頭指針/// </summary>public Node<T> FirstEdge;/// <summary>/// 訪問標(biāo)志,遍歷時使用/// </summary>public Boolean Visited;/// <summary>/// 表頭節(jié)點(diǎn)/// </summary>/// <param name="value"></param>public Vertex(T value) //構(gòu)造方法;{Data = value;}} } ?圖-圖的鄰接表存儲類:using System; using System.Collections.Generic; using System.Linq;namespace Graphic_AdjacencyList {/// <summary>/// 圖的鄰接表存儲類/// </summary>/// <typeparam name="T"></typeparam>public class AdjacencyList<T>{/// <summary>/// 圖的頂點(diǎn)集合/// </summary>private readonly List<Vertex<T>> _items;public AdjacencyList(): this(10){}public AdjacencyList(int capacity){_items = new List<Vertex<T>>(capacity);}/// <summary>/// 添加頂點(diǎn)/// </summary>/// <param name="item"></param>public void AddVertex(T item){if (Contains(item)){throw new ArgumentException("插入了重復(fù)頂點(diǎn)!");}_items.Add(new Vertex<T>(item));Console.WriteLine("添加頂點(diǎn):" + item);}/// <summary>/// 添加無向邊/// </summary>/// <param name="from"></param>/// <param name="to"></param>public void AddEdge(T from, T to){Vertex<T> fromVer = Find(from);if (fromVer == null){throw new ArgumentException("頭頂點(diǎn)不存在!");}Vertex<T> toVer = Find(to);if (toVer == null){throw new ArgumentException("尾頂點(diǎn)不存在!");}//無向邊的兩個頂點(diǎn)都需記錄邊信息;AddDirectedEdge(fromVer, toVer);AddDirectedEdge(toVer, fromVer);Console.WriteLine(string.Format("添加無向邊:{0}—{1}", from, to));}/// <summary>/// 添加有向邊/// </summary>/// <param name="fromVer"></param>/// <param name="toVer"></param>private void AddDirectedEdge(Vertex<T> fromVer, Vertex<T> toVer){if (fromVer.FirstEdge == null) //無臨接點(diǎn)時;{fromVer.FirstEdge = new Node<T>(toVer);}else{Node<T> tem, node = fromVer.FirstEdge;do{if (node.Adjvex.Data.Equals(toVer.Data)){throw new ArgumentException("添加了重復(fù)的邊!");}tem = node;node = node.Next;} while (node != null);tem.Next = new Node<T>(toVer); //添加到鏈表末尾;}}public bool Contains(T item){//foreach (Vertex<T> v in _items)//{// if (v.data.Equals(item))// {// return true;// }//}return _items.Any(v => v.Data.Equals(item));}private Vertex<T> Find(T item){//foreach (Vertex<T> v in _items)//{// if (v.data.Equals(item))// {// return v;// }//}return _items.FirstOrDefault(v => v.Data.Equals(item));}public override string ToString(){string result = string.Empty;foreach (var vertex in _items){if (vertex != null){result += string.Format("頂點(diǎn):{0}:", vertex.Data);if (vertex.FirstEdge != null){Node<T> tem = vertex.FirstEdge;while (tem != null){result += tem.Adjvex.Data.ToString();tem = tem.Next;}}}result += "\r\n";}return result;}} }執(zhí)行結(jié)果:




轉(zhuǎn)載于:https://www.cnblogs.com/zhangqs008/archive/2012/12/02/2802190.html

總結(jié)

以上是生活随笔為你收集整理的图的邻接表存储结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。