자료구조/수업내용
04/02 그래프 연습
박준희
2021. 4. 2. 17:42
Program.cs
using System;
namespace Study09
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main");
new App();
}
}
}
App.cs
using System;
namespace Study09
{
public class App
{
//생성자
public App()
{
Console.WriteLine("App");
Graph g = new Graph();
g.AddVertex("서울");
g.AddVertex("대전");
g.AddVertex("대구");
g.AddVertex("부산");
g.AddVertex("강릉");
g.AddEdge("서울", "강릉", 10);
g.AddEdge("서울", "대구", 7);
g.AddEdge("서울", "대전", 6);
g.AddEdge("대구", "부산", 3);
g.AddEdge("대전", "부산", 7);
g.AddEdge("강릉", "대구", 7);
g.Print();
}
}
}
Node.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study09
{
//정점 클래스(Vertex)
public class Node
{
//키
public string key;
//생성자
public LinkedList<Edge> edges;
public Node(string key)
{
this.key = key;
this.edges = new LinkedList<Edge>();
}
}
}
Edge.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study09
{
public class Edge
{
//어디로부터
public string from;
public string to;
public int weight;
public Edge(string from, string to, int weight = 1)
{
this.from = from;
this.to = to;
this.weight = weight;
}
}
}
Graph.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Study09
{
public class Graph
{
//정점 관리용 컬렉션 선언
public List<Node> nodes;
public Graph()
{
this.nodes = new List<Node>();
}
public void AddVertex(string key)
{
this.nodes.Add(new Node(key));
}
public void AddEdge(string from, string to, int weight = 1)
{
var fromVertex = this.nodes.Find(x => x.key == from);
var edge = new Edge(from, to, weight);
fromVertex.edges.AddFirst(new Edge(from, to, weight));
}
public void Print()
{
foreach(var vertex in this.nodes)
{
var from = vertex.key;
foreach(var edge in vertex.edges)
{
Console.WriteLine("{0} -- ({1}) -- {2}", from, edge.weight, edge.to);
}
}
}
}
}