標籤:des style color io 資料 art ar 問題
十字鏈表
簡單的說就是鄰接表和逆鄰接表的合體,解決了原鄰接表或者逆鄰接表出度和入度的計算無法兼得的問題。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace LH.GraphConsole{ public struct OrthogonalListGraph { public NodeItem[] VertexNodes; public OrthogonalListGraph(int size) { VertexNodes = new NodeItem[size]; } } public struct NodeItem { public List<OrthEdgeItem> InList; public List<OrthEdgeItem> OutList; public NodeItem(List<OrthEdgeItem> inList, List<OrthEdgeItem> outList) { InList = inList; OutList = outList; } } public class OrthEdgeItem { public int Weight; public string Name; public OrthEdgeItem(int weight, string name) { Weight = weight; Name = name; } }}
簡單的主函數:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace LH.GraphConsole{ class Program { static void Main(string[] args) { OrthogonalList(); } private static void OrthogonalList() { var size = 5; var orgthListGraph = new OrthogonalListGraph(size); var orgEdge03 = new OrthEdgeItem(1, "edge03"); var orgEdge10 = new OrthEdgeItem(1, "edge10"); var orgEdge12 = new OrthEdgeItem(1, "edge12"); var orgEdge21 = new OrthEdgeItem(1, "edge21"); var orgEdge20 = new OrthEdgeItem(1, "edge20"); var inList0 = new List<OrthEdgeItem>(); inList0.Add(orgEdge10); inList0.Add(orgEdge20); var outList0 = new List<OrthEdgeItem>(); outList0.Add(orgEdge03); var nodeItem0 = new NodeItem(inList0, outList0); var nodeItem1 = new NodeItem(); var nodeItem2 = new NodeItem(); var nodeItem3 = new NodeItem(); var nodeItem4 = new NodeItem(); orgthListGraph.VertexNodes[0] = nodeItem0; orgthListGraph.VertexNodes[1] = nodeItem1; orgthListGraph.VertexNodes[2] = nodeItem2; orgthListGraph.VertexNodes[3] = nodeItem3; orgthListGraph.VertexNodes[4] = nodeItem4; } }}簡要說明,只是為了便於理解資料結構,沒有刻意的去標準實現,見諒。