본문 바로가기
c#/수업 내용

자료구조 그래프(가중치 그래프)

by 이지훈26 2021. 10. 1.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Helloworld1
{
    class Graph
    {
        public class Vertex
        {
            public string Data
            {
                get;
                private set;
            }
            public LinkedList<Vertex> neighbors;
            public LinkedList<int> weights;

            public Vertex(string data)
            {
                this.neighbors = new LinkedList<Vertex>();
                this.weights = new LinkedList<int>();
                this.Data = data;
            }
        }

        //정점들을 그룹화 하고 관리 
        private List<Vertex> vertexes;

        public Graph()
        {
            //컬렉션 초기화 
            this.vertexes = new List<Vertex>();
        }

        public Vertex AddVetex(string data)
        {
            var vertex = new Vertex(data);
            this.vertexes.Add(vertex);
            return vertex;
        }

        public void AddVertex(Vertex vertex)
        {
            this.vertexes.Add(vertex);
        }

        public void AddEdge(Vertex from, Vertex to, int weight)
        {
            from.neighbors.AddLast(to);
            to.neighbors.AddLast(from);
            from.weights.AddLast(weight);
            to.weights.AddLast(weight);
        }

        public void Print()
        {
            foreach (Vertex vertex in this.vertexes)
            {

                for (int i = 0; i < vertex.neighbors.Count; i++)
                {
                    var v = vertex.neighbors.ElementAt(i);
                    var w = vertex.weights.ElementAt(i);

                    Console.WriteLine("{0} - {1} - {2}", vertex.Data, w, v.Data);
                }
            }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Helloworld1
{
    class App
    {
        public App()
        {
            var graph = new Graph();
            var seoul = graph.AddVetex("서울");
            var gangrung = graph.AddVetex("강릉");
            var deajun = graph.AddVetex("대전");
            var deagu = graph.AddVetex("대구");
            var busan = graph.AddVetex("부산");

            graph.AddEdge(seoul, gangrung, 10);
            graph.AddEdge(seoul, deagu, 7);
            graph.AddEdge(seoul, deajun, 6);
            graph.AddEdge(deajun, busan, 7);
            graph.AddEdge(deagu, busan, 3);
            graph.AddEdge(deagu, gangrung, 4);


            graph.Print();

        }
    }
}