티스토리 뷰

C#/복습

자료구조-그래프

Game Client Lee Hwanguk 2023. 1. 29. 22:38

#class Graph -생성된 node들을 가지고있는 List<Node>nodes 생성

AddVertex는 매개변수로 받은 node를 nodes에 Add

AddEdge는 매개변수로 받은 Node a와 Node b를 a.adjacency에 추가(서로 같은 node들은 인접정점이 될수 없음)

PrintAll- 모두 출력. for반복문으로 nodes.Count만큼 반복하며 nodes의인덱스의data 출력.

foreach를 통해 Node a=this.nodes[i]의 요소들( .data) 출력(가시성을 위해 -"{0}"으로 이어져있음을 보여주자)

#class Node-data를 매개변수로 받아 data를 가지고있는 node로 생성됨(생성자), 정점들끼리 이어져있는 인접정점 List<Node>adjacency가 생성됨

#class App

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

namespace Graph
{
    
    internal class App
    {
        public App()
        {
            Graph graph= new Graph();
            Node n0 = new Node("a"); //data할당
            Node n1 = new Node("b");

            graph.AddVetex(n0); //정점 추가
            graph.AddVetex(n1);

            graph.AddEdge(n0,n1); //인접정점 추가
            graph.printAll();
        }
    }
    class Node //노드(정점),vertex
    {
        //data를 가지고있는 node들
        //인접정점 adjacency를 List로
        //생성자 -data를 매개변수로 받고 인접정점 List생성
        public string data;
        public List<Node> adjacency; //인접정점

        //생성자
        public Node(string data)
        {
            this.data = data;
            this.adjacency = new List<Node>();
        }

    }

    class Graph
    {
        //node들을 가지고있는 List
        private List<Node> nodes;

        //생성자
        public Graph()
        {
            //nodes 리스트 생성
            this.nodes = new List<Node>();
        }

        //메서드(기능)

        public void AddVetex(Node node) //Vertex추가,nodes에 할당
        {
            this.nodes.Add(node);
        }

        public void AddEdge(Node a, Node b) //Edge추가,연결되는 정점들 adjacency에 추가
        {
            a.adjacency.Add(b); //a와 a는 인접정점이 될수없다
            b.adjacency.Add(a);
        }

        public void printAll() //출력(nodes)
        {
            for(int i=0; i<nodes.Count; i++) 
            {
                Console.WriteLine(nodes[i].data);
                Node a = this.nodes[i];
                foreach(var ab in a.adjacency)
                {
                    Console.WriteLine(ab.data);
                }
            }
        }
    }
}

'C# > 복습' 카테고리의 다른 글

Unity복습(Skill,Enemy hpPoint)  (0) 2023.02.20
Unity 복습 (Button, Switch,Slide,Popup)  (0) 2023.02.19
직렬화, 역직렬화  (0) 2023.01.24
Linq  (0) 2023.01.23
람다식(문),Action, Func  (1) 2023.01.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함